问题描述
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
示例
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 输入:head = [1,2] 输出:[2,1] 输入:head = [] 输出:[]
解题思路 :我们需要三个指针变量,首先prev指向NULL,cur指向head,tmp指向cur->next,tmp在这里的作用及就是保存cur的下一个节点。我们每次操作只需要变换cur指针的指向,使它指向前边的节点即可,前边的节点用prev指向,变换完后将三个指针同步后移即可。
画图实现:
代码实现
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* prev = NULL;
struct ListNode* cur = head;
while(cur)
{
struct ListNode* tmp = cur->next;
cur->next = prev;
prev = cur;
cur= tmp;
}
return prev;
}