作者 github链接: github链接
力扣第206题
类型:链表
题目:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例1
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例2
输入:head = [1,2]
输出:[2,1]
示例3
输入:head = []
输出:[]
解题思路
思路细节:
- 定义两个指针:
prev
:前指针节点;curr:
当前指针节点 - 前指针节点指向
null
,curr
放在链表的head
处 curr!=null
就一直循环- 因为下一步
prev
指向了curr->next,
连接后面的链表即将断开,这是我们做一个提前准备,搞一个next
指针当临时的给后面的链表做一个标志,以便curr
向后面迭代。 curr->next
原来链接后面的值,现在让它断开,来让prev
来连接curr->next
。prev
向后面移动,curr
向后面移动(这里就用到了前面准备好的临时变量next,
正是因为有next
,才能让curr
找到下一个位置继续迭代)- 迭代完成,返回整个链表,实现反转
c++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
/*
定义两个指针:
prev:前指针节点
curr:当前指针节点
*/
ListNode * prev = NULL;//前指针节点指向null
ListNode *curr = head;//curr放在链表的head处
while(curr){//curr!=null就一直循环
ListNode *next = curr->next;//因为下一步prev指向了curr->next,连接后面的链表即将断开,这是我们做一个提前准备,搞一个next指针当临时的给后面的链表做一个标志,以便curr向后面迭代。
curr->next = prev;//curr->next原来链接后面的值,现在让它断开,来让prev来连接curr->next
prev = curr;//prev向后面移动
curr = next;//curr向后面移动(这里就用到了前面准备好的临时变量next,正是因为有next,才能让curr找到下一个位置继续迭代)
}
return prev;//迭代完成,返回整个链表,实现反转
}
};
python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
prev = None
curr = head
while curr is not None:
next = curr.next
curr.next = prev
prev = curr
curr = next
return prev
解题草稿纸(仅供参考,如有错误还望指正)