反转链表
题目描述:输入一个链表,反转链表并输出。
思路:通常处理方法是将当前结点的next域指向其前一结点。
由于需要将当前结点的next域修改为前一结点,所以我们需要用一个指针PrevNode来记录前一结点。同时,因为修改了当前结点到的next结点后,便无法访问原来的next结点,因此需要一个NextNode指针来记录修改前的原来的next结点。
代码如下:
#include <iostream>
using namespace std;
typedef struct ListNode
{
int data;
ListNode* next;
ListNode(int x) :data(x), next(NULL)
{}
}link;
//打印链表
void ShowList(link* head)
{
link* temp = head;
while (temp)
{
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
//反转链表
link* ReverseList(link* head)
{
link* CurrNode = head;
link* PrevNode = NULL;
link* NextNode = NULL;
while (CurrNode != NULL)
{
link* NextNode = CurrNode->next;
CurrNode->next = PrevNode;
PrevNode = CurrNode;
CurrNode = NextNode;
if (NextNode != NULL)
{
NextNode = NextNode->next;
}
}
return PrevNode;
}
int main()
{
link head(1);
link n1(2);
link n2(3);
link n3(4);
link n4(5);
link n5(6);
head.next = &n1;
n1.next = &n2;
n2.next = &n3;
n3.next = &n4;
n4.next = &n5;
ShowList(&head);
unsigned int k = 3;
link* temp = NULL;
temp = ReverseList(&head);
ShowList(temp);
return 0;
}
还没有评论,来说两句吧...