链表反转的两种方式
1.头插法
先创建一个新的链表,然后不断遍历我们想要反转的链表,再一个一个使用头插法插入到我们新建立的链表中,这样链表就倒置了。
LinkList Reverse(LinkList re)
{
LinkList n;
n = (LinkList)malloc(sizeof(LNode));
n->next = NULL;
while (re->next != NULL)
{
LinkList cnt = (LinkList)malloc(sizeof(LNode));
cnt->data = re->next->data;
cnt->next = n->next;
n->next = cnt;
re = re->next;
}
return n;
}
2.列表原地倒置
主要就是创建两个变量一个,next, 另一个 prev,从前往后过一遍即可。
LinkList Reverse(LinkList re)
{
LinkList prev = NULL, curr = re, next;
while (curr != NULL)
{
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev; // prev最终会是新的头节点
}