Leetcode 206: 反转链表 (python)
注:本文仅供学习,并无商业用途、
头插法
可以增加一个虚拟头节点,初始时其next值为None。然后依次遍历题目所给链表,依次将节点以头插法插入虚拟头节点指向的链表之中。
代码如下:
# 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:
n = 0
v = ListNode(0, None)
p = head
while p!= None:
q = p.next
p.next = v.next
v.next = p
p = q
return v.next
双指针法
此处思路来自代码随想录,反转指针,只需要调转链表中next的指向即可,为此我们需要两个指针,分别用于记录当前节点及其前一个节点的位置。
代码如下:
#双指针
# 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:
cur = head
pre = None
while(cur!=None):
temp = cur.next # 保存一下 cur的下一个节点,因为接下来要改变cur->next
cur.next = pre #反转
#更新pre、cur指针
pre = cur
cur = temp
return pre
代码链接:https://gitee.com/pakchoi007/leetcode-master/blob/master/problems/0206.%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8.md