反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
先使pPrev 和pNext都为空 pCurrent指向当前结点
最后当pCurrent 为空时结束
while (pCurrent)
{
pNext = pCurrent->next;
pCurrent->next = pPrev;
pPrev = pCurrent;
pCurrent = pNext;
}
pHeader->next = pPrev;
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode;
//创建链表
LinkNode *CreateLink_list()
{
LinkNode *pHeader = (LinkNode *)malloc(sizeof(LinkNode));
pHeader->next = NULL;
LinkNode *s;
int x;
scanf("%d", &x);
while (x)
{
s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = pHeader->next;
pHeader->next = s;
scanf("%d", &x);
}
return pHeader;
}
//链表反转
void reverse_LinkList(LinkNode *pHeader)
{
if (pHeader == NULL)
{
return;
}
LinkNode *pCurrent = pHeader->next;
LinkNode *pPrev = NULL;
LinkNode *pNext = NULL;
while (pCurrent)
{
pNext = pCurrent->next;
pCurrent->next = pPrev;
pPrev = pCurrent;//三个指针往后移
pCurrent = pNext;
}
pHeader->next = pPrev;
}
//链表遍历输出
void print(LinkNode *pHeader)
{
LinkNode *p;
if (pHeader == NULL)
{
return;
}
else
{
p = pHeader->next;
while (p != NULL)
{
printf("%4d", p->data);
p = p->next;
}
}
}
void main()
{
LinkNode *Header;
Header = CreateLink_list();
print(Header);
printf("\n");
reverse_LinkList(Header);
printf("反转后的结果为:\n");
print(Header);
system("pause");
return 0;
}