代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点

1. leetcode24 两两交换链表中的节点

题目链接:24. 两两交换链表中的节点 - 力扣(LeetCode)

文章链接:代码随想录 (programmercarl.com)

视频链接:帮你把链表细节学清楚! | LeetCode:24. 两两交换链表中的节点_哔哩哔哩_bilibili

1.1 代码

这个代码是用循环的思路来进行判断的,写的过程挺考验中间赋值的

1.1.1 根据老师思路写的一个版本
# 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)
        current =dummy_head
        while (current.next and current.next.next):
            temp = current.next
            temp1 = current.next.next.next
            current.next = current.next.next
            current.next.next = temp
            current.next.next.next = temp1
            current = current.next.next
        return dummy_head.next
1.1.2 根据python链式赋值的规律版本
# 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)
        current =dummy_head
        while (current.next and current.next.next):
            current.next,current.next.next,current.next.next.next = current.next.next,current.next,current.next.next.next
            current = current.next.next
        return dummy_head.next

1.2 交换链表总结

  1. 思路上面就是链表的赋值的时候,他就是等于重新连接了,有的链条会因为重新连接而断开,所以对于断开的连接需要进行重连
  2. 思路上还有一点就是二者交换的时候,首先得保证这两个都是有数值的才能交换

2.leetcode19 删除链表的倒数第N个节点

题目链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

文章链接:代码随想录 (programmercarl.com)

视频链接:链表遍历学清楚! | LeetCode:19.删除链表倒数第N个节点_哔哩哔哩_bilibili

2.1 代码

这道题就是看了觉得很简单,找到他的前一个值,然后进行删除,但是第一次写的时候就写错了,后面就重新看了别人的思路,写了一个版本

# 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]:
        dummy_head = ListNode(next = head)
        current_fast = dummy_head
        current_slow = dummy_head
        for i in range(n+1):
            current_fast = current_fast.next
        while current_fast:
            current_slow = current_slow.next
            current_fast = current_fast.next
        current_slow.next = current_slow.next.next
        return dummy_head.next

2.2 总结

用到了双指针的快慢指针的思路,才开始想的太过简单,然后写的时候就废了,写错了,感觉今天的学习状态不佳,就先刷两道题,另一题明天再写吧。

posted @ 2024-10-19 15:47  小方呀0524  阅读(2)  评论(0编辑  收藏  举报