当前位置: 代码迷 >> 综合 >> 剑指offer24--反转链表(关于双指针赋值的新理解)
  详细解决方案

剑指offer24--反转链表(关于双指针赋值的新理解)

热度:99   发布时间:2024-02-08 07:57:59.0

 

其实这道题难度不是很大

在自己琢磨之后

方法1:

解题思路:借用双指针,创建一个临时指针作为中转。

class Solution:def reverseList(self, head: ListNode) -> ListNode:if not head:return NonepTemp = headcur = Nonewhile pTemp:temp = ListNode(head.val)temp.next = curcur = temppTemp = pTemp.nextreturn cur

方法2:

极简化思维(新手不推荐)

class Solution:def reverseList(self, head: ListNode) -> ListNode:last = Nonewhile head:head.next , last , head = last , head, head.nextreturn last

方法3:

就是本文的重点双指针赋值的新理解的写法。

class Solution:def reverseList(self, head: ListNode) -> ListNode:        if not head :return Nonecur = headtmp= Nonewhile  cur:          cur, tmp, tmp.next = cur.next, cur, tmp 
#            cur.next, tmp , cur = tmp, cur, cur.next  #根据方法2改编return tmp

对于

nums[i], nums[j] = nums[j], nums[i]

实现两个数交换。没有先后顺序。

但是

cur, tmp, tmp.next = cur.next, cur, tmp

却可以完成链表反转,其赋值语句是存在先后顺序的,但其代表着的是内存中数值的变化,

比如用例[1,2,3,4,5]第一次while循环中,cur = head,经过

cur = cur.next

此时cur指的是cur ->1 的位置。而 tmp 此时为None,经过

tmp = cur

在内存中 tmp = 1 ,再经过

tmp.next = tmp

即把1->None

即完成了第一次循环。

第二次循环同理:cur = 1,经过

cur = cur.next

cur 指向 2 ,而 tmp 此时为 1,经过

tmp = cur

在内存中 tmp = 2  ,再经过

tmp.next = tmp

即把2 -> 1

  相关解决方案