题目内容
就是翻转链表,主要方法有两种一个是双指针,另一个是递归法。
问题求解
双指针
依次往下遍历即可:
# 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: Optional[ListNode]) -> Optional[ListNode]:
cur=head #cur为head
pre=None#pre指向None
while cur:
next_=cur.next #引入一个临时变量temp
cur.next=pre
pre = cur #向后移动
cur = next_
return pre
为什么要加入一个临时指针,主要原因就是要使得cur指针前后都用节点,这样才可以实现移动。
递归写法
# 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: Optional[ListNode]) -> Optional[ListNode]:
def reverse(head):
if not head or not head.next :
return head
reverse_head = reverse(head.next)
head.next.next=head # 相当于2指向1
head.next=None#指向None
return reverse_head
return reverse(head)
总结
&emsp该好好体会。