day16笔记
1.题目描述
2.代码构思(debug)
方法1: 设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。
在遍历链表时,将当前节点的 \textit{next}next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head:
return
pre, cur = None, head
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
方法2: 通过辅助数组实现翻转
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head:
return
p = head
lst = []
while p:
lst.append(p.val)
p = p.next
lst = lst[::-1]
head1 = ListNode(lst[0])
p = head1
for item in lst[1:]:
p.next = ListNode(item)
p = p.next
return head1
class Solution:
"""
@param head: ListNode head is the head of the linked list
@param m: An integer
@param n: An integer
@return: The head of the reversed ListNode
"""
def reverse_between(self, head: ListNode, m: int, n: int) -> ListNode:
# write your code here
if not head:
return
dummy = ListNode(-1)
dummy.next = head
pre = dummy
for i in range(m - 1):
pre = pre.next
cur = pre.next
for i in range(n - m):
tmp = cur.next
cur.next = tmp.next
tmp.next = pre.next
pre.next = tmp
return dummy.next