国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言實(shí)現(xiàn)單鏈表逆序與逆序輸出實(shí)例

2020-01-26 15:22:45
字體:
供稿:網(wǎng)友

單鏈表的逆序輸出分為兩種情況,一種是只逆序輸出,實(shí)際上不逆序;另一種是把鏈表逆序。本文就分別實(shí)例講述一下兩種方法。具體如下:

1.逆序輸出

實(shí)例代碼如下:

#include<iostream>#include<stack>#include<assert.h>using namespace std;typedef struct node{ int data; node * next;}node;//尾部添加node * add(int n, node * head){ node * t = new node; t->data = n; t->next = NULL; if (head == NULL){  head = t; } else if (head->next == NULL){  head->next = t; } else{  node * p = head->next;  while (p->next != NULL){   p = p->next;  }  p->next = t; } return head;}//順序輸出void print(node * head){ node * p = head; while (p != NULL){  cout << p->data << " ";  p = p->next; } cout << endl;}//遞歸void reversePrint(node * p){ if (p != NULL){  reversePrint(p->next);  cout << p->data << " "; }}//棧void reversePrint2(node * head){ stack<int> s; while (head != NULL){  s.push(head->data);  head = head->next; } while (!s.empty()){  cout << s.top() << " ";  s.pop(); }}int main(){ node * head = NULL; for (int i = 1; i <= 5; i++){  head = add(i, head); }  print(head);  reversePrint(head);  reversePrint2(head); system("pause");  return 0;}

逆序輸出可以用三種方法: 遞歸,棧,逆序后輸出。最后一種接下來講到。

2.單鏈表逆序

實(shí)例代碼如下:

#include<iostream>#include<stack>#include<assert.h>using namespace std;typedef struct node{ int data; node * next;}node;node * add(int n, node * head){ node * t = new node; t->data = n; t->next = NULL; if (head == NULL){  head = t; } else if (head->next == NULL){  head->next = t; } else{  node * p = head->next;  while (p->next != NULL){   p = p->next;  }  p->next = t; } return head;}//循環(huán)node * reverse(node * head){ if (head == NULL || head->next == NULL){  return head; } node * p1 = head; node * p2 = head->next; node * p3 = NULL;  head->next = NULL; while (p2 != NULL){  p3 = p2;  p2 = p2->next;  p3->next = p1;  p1 = p3; } head = p1; return head;}void print(node * head){ node * p = head; while (p != NULL){  cout << p->data << " ";  p = p->next; } cout << endl;}//遞歸node * reverse2(node * p){ if (p == NULL || p->next == NULL){  return p; } node * newHead = reverse2(p->next); p->next->next = p; p->next = NULL; return newHead;}int main(){ node * head = NULL; for (int i = 1; i <= 5; i++){  head = add(i, head); } print(head); head = reverse(head); print(head); head = reverse2(head); print(head); system("pause"); return 0;}

這里鏈表逆序用了兩種方法:循環(huán),遞歸。讀者最容易理解的方法就是在紙上自己畫一下。

希望本文所述實(shí)例對(duì)大家的數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)能有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 陇南市| 金乡县| 唐山市| 高平市| 濉溪县| 万荣县| 平果县| 土默特左旗| 阜平县| 东海县| 桦甸市| 卢氏县| 金川县| 福鼎市| 柘城县| 册亨县| 攀枝花市| 化德县| 新乐市| 城固县| 云浮市| 张家港市| 东阳市| 花莲市| 建始县| 图片| 介休市| 抚州市| 昆山市| 宣威市| 房山区| 藁城市| 乌拉特中旗| 临洮县| 贞丰县| 稷山县| 南通市| 南通市| 黄山市| 黄浦区| 凤山县|