單鏈表逆序或者逆序輸出

來源:互聯網
上載者:User

標籤:style   blog   color   os   io   for   div   log   new   

分為兩種情況,一種是只逆序輸出,實際上不逆序;另一種是把鏈表逆序。

 

********************逆序輸出***********************

 

 1 #include<iostream> 2 #include<stack> 3 #include<assert.h> 4 using namespace std; 5  6  7 typedef struct node{ 8     int data; 9     node * next;10 }node;11 12 //尾部添加13 node * add(int n, node * head){14     node * t = new node;15     t->data = n;16     t->next = NULL;17     if (head == NULL){18         head = t;19     }20     else if (head->next == NULL){21         head->next = t;22     }23     else{24         node * p = head->next;25         while (p->next != NULL){26             p = p->next;27         }28         p->next = t;29     }30     return head;31 }32 33 //順序輸出34 void print(node * head){35     node * p = head;36     while (p != NULL){37         cout << p->data << " ";38         p = p->next;39     }40     cout << endl;41 }42 43 //遞迴44 void reversePrint(node * p){45     if (p != NULL){46         reversePrint(p->next);47         cout << p->data << " ";48     }49 }50 51 //棧52 void reversePrint2(node * head){53     stack<int> s;54     while (head != NULL){55         s.push(head->data);56         head = head->next;57     }58 59     while (!s.empty()){60         cout << s.top() << " ";61         s.pop();62     }63 }64 65 int main(){66 67     node * head = NULL;68     for (int i = 1; i <= 5; i++){69         head = add(i, head);70     }71         print(head);72         reversePrint(head);73         reversePrint2(head);74     system("pause");75         return 0;76 }                

 

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

 

*********************單鏈表逆序********************

 

 1 #include<iostream> 2 #include<stack> 3 #include<assert.h> 4 using namespace std; 5  6  7 typedef struct node{ 8     int data; 9     node * next;10 }node;11 12 node * add(int n, node * head){13     node * t = new node;14     t->data = n;15     t->next = NULL;16     if (head == NULL){17         head = t;18     }19     else if (head->next == NULL){20         head->next = t;21     }22     else{23         node * p = head->next;24         while (p->next != NULL){25             p = p->next;26         }27         p->next = t;28     }29     return head;30 }31 32 //迴圈33 node * reverse(node * head){34 35     if (head == NULL || head->next == NULL){36         return head;37     }38 39     node * p1 = head;40     node * p2 = head->next;41     node * p3 = NULL; 42     head->next = NULL;43 44     while (p2 != NULL){45         p3 = p2;46         p2 = p2->next;47         p3->next = p1;48         p1 = p3;49     }50     head = p1;51     return head;52 }53 54 void print(node * head){55     node * p = head;56     while (p != NULL){57         cout << p->data << " ";58         p = p->next;59     }60     cout << endl;61 }62 63 64 //遞迴65 node * reverse2(node * p){66     if (p == NULL || p->next == NULL){67         return p;68     }69 70     node * newHead = reverse2(p->next);71     p->next->next = p;72     p->next = NULL;73     return newHead;74 }75 76 77 int main(){78 79     node * head = NULL;80     for (int i = 1; i <= 5; i++){81         head = add(i, head);82     }83     print(head);84     head = reverse(head);85     print(head);86     head = reverse2(head);87     print(head);88 89     system("pause");90     return 0;91 }

 

這裡鏈表逆序用了兩種方法:迴圈,遞迴。理解的方法是在紙上自己畫一下。

單鏈表逆序或者逆序輸出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.