反转单向链表是一道很水的题,但是中间的逻辑需要弄明白还是要花一些心思的,所以记录一下。
直接贴代码,很粗糙,核心为蓝色部分。
#include<iostream>
using namespace std;
struct Node
{
int value;
Node* next;
};
int main()
{
Node *a=new Node();
Node *b = new Node();
Node *c = new Node();
Node *d = new Node();
a->value = 1;
a->next = b;
b->value = 2;
b->next = c;
c->value = 3;
c->next = d;
d->value = 4;
d->next = NULL;
Node *head;
head = a;
while (head != NULL)
{
cout << head->value;
head = head->next;
}
cout << endl;//开始反转
if (head == NULL || head->next == NULL)
{
cout << "无需反转";
return;
}
head = a;
Node *second = head->next;
head->next = NULL;
while (second!=NULL)
{
Node* temp = second->next;
second->next = head;
head = second;
second = temp;
}
//反转结束
cout << "反转后";
while (head != NULL)
{
cout << head->value;
head = head->next;
}
system("pause");
}
另一种是用栈来实现