题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
思路:双指针法
动态图思路链接:
https://leetcode.cn/problems/reverse-linked-list/solutions/2361282/206-fan-zhuan-lian-biao-shuang-zhi-zhen-r1jel/?envType=study-plan-v2&envId=top-100-liked
C++:
#include<iostream>
using namespace std;
struct ListNode
{
int val;
ListNode* next;
ListNode(int x)
{
val = x;
next = nullptr;
}
};
class Solution
{
public:
ListNode *left = head;
ListNode *right = nullptr;
while(left != right)
{
ListNode *tmp = left->next; // 暂存后继结点
left->next = right; // 修改 next 的引用指向
right = left; // right 暂存 left
left = tmp; // left 访问下一节点
}
return right;
};
python:
思路同上。
class ListNode(object):
def __init__(self, val=0,next = None):
self.val = val
self.next = next
class Solution:
def reverseList(self,head):
cur, pre = head, None
# 直到cur为None退出
while cur:
tmp = cur.next # 暂存后继节点 cur.next
cur.next = pre # 修改 next 引用指向
pre = cur # pre 暂存 cur
cur = tmp # cur 访问下一节点
return pre