C++ 链表翻转

来源:互联网 发布:知乎好看搞笑段子 编辑:程序博客网 时间:2024/06/05 16:17
#include <iostream>
#include <string>


struct Node {
int value;
Node * next;


Node(int data) : value(data), next(nullptr) {};
};


Node * reverse(Node * head);
void Print(Node * head);


int main()
{
Node  node1(5);
Node  node2(10);
Node  node3(15);
Node  node4(20);


node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = nullptr;


Node *head = &node1;

std::cout << "Before reverse: " << std::endl;
Print(head);
std::cout << "After reverse: " << std::endl;
Print(reverse(head));


system("pause");
return 0;
}
Node * reverse(Node * head)
{
if (head == nullptr)
{
return head;
}


Node * pre = nullptr;
Node * next = nullptr;


while (head != nullptr)
{
next = head->next;
head->next = pre;
pre = head;
head = next;
}


return pre;
}


void Print(Node * head)
{
while (head != nullptr)
{
std::cout << head->value << std::endl;
head = head->next;
}
}