参考了这位博主的文章,很容易理解
https://blog.csdn.net/cangchen/article/details/45040259
image.png
核心代码
next = head->next;
head->next = prev;
prev = head;
head = next;
#include "stdio.h"
#include "stdlib.h"
typedef int ElementType;
typedef struct Node
{ /*结点类型定义*/
ElementType data;
struct Node *next;
} Node, *LinkList; /*LinkList为结构指针类型*/
// void reverseList(LinkList head);
void printListNode(LinkList L);
LinkList reverseList(LinkList L)
{
LinkList prev = NULL;
LinkList head = L->next;
LinkList next;
while (head != NULL)
{
next = head->next;
head->next = prev;
prev = head;
head = next;
}
LinkList node = (LinkList)malloc(sizeof(struct Node)); //给链表prev添加头指针
node->next = prev;
return node;
}
void printListNode(LinkList L)
{
LinkList tmp = L->next;
while (tmp)
{
printf("%d", tmp->data);
tmp = tmp->next;
}
return;
}
LinkList initList()
{
LinkList L;
L = (LinkList)malloc(sizeof(struct Node));
if (L == NULL)
{
printf("申请空间失败");
}
L->next = NULL;
return L;
}
int main()
{
int i = 0;
LinkList L = initList();
LinkList node;
for (; i < 8; i++)
{
node = (LinkList)malloc(sizeof(struct Node));
node->data = i;
node->next = L->next;
L->next = node;
}
printf("原单链表:");
printListNode(L);
printf("\n");
LinkList L2 = reverseList(L);
printf("逆反单链表:");
printListNode(L2);
return 0;
}