체인 테이블 반전(노드 포인터 방향 변경하지 않음)

4251 단어 체인 테이블
#include <iostream>
#include <stack>
using namespace std;

struct Node{
    int data;
    Node *next;
    Node(int d) : data(d) {}
};

int label = 0;

// : ,left right, right , left right, return ,right ,left 。
void Reverse(Node *&left, Node *right){
    if (!left || !right)
        return;

    Reverse(left, right->next);

    if (left == right || right->next == left){    //left == right ,right->next == left 
        label = 1;
        return;
    }
    if (label == 1)
        return;

    int tmp = left->data;
    left->data = right->data;
    right->data = tmp;
    left = left->next;
}

void Reverse(Node *start){
    if (!start)
        return;

    Reverse(start, start);
}

void PrintLinkedList(Node *start){
    while(start){
        cout<<start->data<<endl;
        start = start->next;
    }
}

int main()
{
    Node a(1);
    Node b(2);
    Node c(3);
    Node d(4);
    Node e(5);
    a.next = &b;
    b.next = &c;
    c.next = &d;
    d.next = &e;
    e.next = NULL;
    Reverse(&a);
    PrintLinkedList(&a);
    return 0;
}

 
 
 
 
 
 
 
EOF

좋은 웹페이지 즐겨찾기