前言
- 本系列主要讲解链表的经典题
注:划重点!!必考~
反转链表
- 题目描述:
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表
示例:
- 提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
- 解题思路:
这里我们采用三指针进行反转链表:
- 指针cur进行遍历链表
- 指针next记录cur的下一个指针,防止反转时下一个节点地址丢失
- 指针prev用来记录cur后指针,以便构建反转后的节点关系
注:需要处理好首节点节点之间的更替关系
参考代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head){ struct ListNode* prev=NULL,*cur=head,*next; while(cur)//cur为NULL时遍历链表结束 { //保存下一个节点地址 next=cur->next; //反转链接方向 cur->next=prev; //更新后指向结点位置 prev=cur; //更新指向当前节点位置 cur=next; } return prev; }
结果:
每日k题无烦恼,留个三连再走也不迟~