1. 程式人生 > >連結串列逆序(遞迴法)

連結串列逆序(遞迴法)

來自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; }

==