题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入: head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入: head = [1,2]
输出:[2,1]
示例 3:
输入: head = []
输出:[]
题解:
核心要点
- pre:指向已经反转部分的头节点(初始为 NULL)
- cur:指向当前要反转的节点(初始为原链表头 head)
- nextTemp:暂存 cur->next,防止在修改 cur->next 后丢失后续链表
算法步骤
1.初始化:pre = NULL,cur = head
2.遍历链表:当 cur 不为空时,重复以下操作:
- 暂存 cur 的下一个节点:nextTemp = cur->next
- 反转指针方向:cur->next = pre
- 移动 pre 到当前节点:pre = cur
- 移动 cur 到下一个节点:cur = nextTemp
3.返回新头节点:循环结束后,pre 指向原链表的最后一个节点,即反转后的新头节点,返回 pre。
答案:
cpp
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre=NULL;//指向已经反转部分的新链表头
ListNode* cur=head;//前待反转的节点
while(cur!=NULL){
ListNode*nextTemp=cur->next;//暂存下一个节点,防止丢失
cur->next=pre;//反转指针方向
pre=cur;//pre移到当前节点
cur=nextTemp;//cur继续向前处理下一个节点
}
return pre;//循环结束时pre指向原链表的最后一个节点,即反转后的新头节点
}
};