day4 链表,环

19题

# Definition for singly-linked list.

# class ListNode:

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution:

    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:

        head_dummy = ListNode()

        head_dummy.next = head

        slow, fast = head_dummy, head_dummy

        while(n>=0):

            fast = fast.next

            n -= 1

        while(fast!= None):

            slow = slow.next

            fast = fast.next

        slow.next = slow.next.next

        return head_dummy.next  # 不能return head, 因为head是刚开始定义的,head_dummy.next才是真正指向head的。

24题,交换链表中的节点,设置dummy head  cur   以及temp的意义

# Definition for singly-linked list.

# class ListNode:

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution:

    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:

        dummy_head = ListNode(next = head)

        cur = dummy_head

        while cur.next and cur.next.next:

            #temp = cur.next   试图在下面直接写cur.next, 不用temp

            #temp1 = cur.next.next.next

            cur.next = cur.next.next

            cur.next.next = cur.next

            cur.next.next = cur.next.next.next

            cur = cur.next.next

       

        return(dummy_head.next)

这样写运行超时。

下面这样才行

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        dummy_head = ListNode(next = head)
        cur = dummy_head

        while cur.next and cur.next.next:
            temp = cur.next
            temp1 = cur.next.next.next

            cur.next = cur.next.next
            cur.next.next = temp
            temp.next = temp1
            cur = cur.next.next
        
        return(dummy_head.next)

dummy_head统一操作方式

cur是一个活动指针,只是起始点是dummy_head

不能用dummy_head直接操作,因为要保留dummy_head 的原始位置用来返回整个链表

temp的作用:在链接消失之前先保存起来

为什么不能用.next替代temp: 

因为cur是不断变化的,temp存储的是刚开始的那个链接,不用temp相当于刻舟求剑。

160链表相交

if(lenB > lenA):

            curA, curB = curB, curA

            lenA, lenB = lenB, lenA

统一让A是最长链,不是的话交换一下。

142 主要是分析

若有环,快慢指针一定会在环内相遇

为什么慢指针在第一圈就会被快指针追上, 因为快指针快一倍

x = z, 这个是数学推导出来的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值