链表逆序(递归法)
来自SO,貌似没啥实际应用,但是思路不错,留存。
#include <Windows.h> #include <iostream> using namespace std; struct node { int data; node* next; node(int d, node* p):data(d), next(p){} }; void print_list(node* head) { node* temp = head; while(temp != NULL) { cout << temp->data << " -> "; temp = temp->next; } cout << "NULL"; cout << endl; } void reverse_linklist1(node*& head) { node* first = head; node* rest = first->next; if (rest == NULL) return; reverse_linklist1(rest); first->next->next = first; first->next = NULL; head = rest; } void reverse_linklist2(struct node*& head) { node *p = head; if(p->next == NULL){ return; } head = p->next; reverse_linklist2(head); p->next->next = p; p->next = NULL; } int main(void) { // build link list node* p3 = new node(3, NULL); node* p2 = new node(2, p3); node* p1 = new node(1, p2); print_list(p1); reverse_linklist2(p1); print_list(p1); getchar(); return 0; }
==
作者:zdd
出处:http://www.cnblogs.com/graphics/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.