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

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

时间:2024-10-19 15:43:29浏览次数:6  
标签:current head ListNode self 随想录 next 链表 节点

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 总结

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

标签:current,head,ListNode,self,随想录,next,链表,节点
From: https://www.cnblogs.com/csfy0524/p/18475970

相关文章

  • LeetCode 707 - 设计链表
    题目描述你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 ......
  • 力扣608.树节点练习
    力扣608.树节点一、题目总结如果你代码出错,可能是以下问题1、notin使用出现问题:notin后面接select子查询的结果中不能出现空值,需要像我这样whereidnotin(selectifnull(p_id,‘ad’)asidfromTreetr2),使用ifnull将空值转化为其他值,才能正常进行判断,但是如......
  • 链表实现两个链表LA和LB的交集、并集、大整数相加
    #include<iostream>usingnamespacestd;#include<math.h>#defineOK1#defineERROR0typedefintStatus; typedefstructLNode{    intdata;      structLNode*next;     }LNode,*LinkList;   intListLength(LinkListL)......
  • 02.数据结构介绍&顺序表、链表简述+对比
    目录一、什么是数据结构二、线性表三、顺序表四、链表五、顺序表和链表的区别一、什么是数据结构          数据结构是由“数据”和“结构”两个词组合而来。    数据:常见的数值1、2、3......,网页里的文字图片信息等都是数据。    ......
  • 代码随想录打卡Day2
                                                                                                                                   ......
  • 代码随想录打卡Day3
    链表:通过指针链接的线性数据结构。链表由两部分组成,一为数据域,一为指针域。并与结构体有很大关系,链表的节点一般都是结构体,其中包含了该节点的数据部分以及指向下一节点的指针。通过这种方式,链表将结构体与指针连接起来,从而构建一个强大的数据结构,可以同时实现数据的组织和动......
  • 代码随想录算法训练营day19| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插
    学习资料:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html****学习记录:235.二叉搜索树的最近公共祖先(加一个函数traversal)点击查看代码#Definitionforabinarytreenode.#classTreeNode(object):#def__init__(self,x):#self.val=x......
  • 代码随想录算法训练营day18 |530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数
    学习资料:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html530.二叉搜索树的最小绝对差(双指针法,pre&cur,设置最小差值初始为无穷大,当差值<最小差值就更新最小差值)点击查看代码#Definitionforabinarytreenode.#classTreeNode(object):#def__init__(......
  • 代码随想录算法训练营第三天|203.移除链表元素,707.设计链表,206.反转链表
    1前言今日主要学习链表的基础leetcode203移除链表元素leetcode707设计链表leetcode206反转链表2链表的基础链表分为单链表和双链表,与字符串的区别就是链表是在一个里面存储了数据+下一个数据的内存地址链表中存储的内存空间是可以不连续的2.1链表的定义2.1.1......
  • 代码随想录算法训练营 | 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离
    115.不同的子序列题目链接:115.不同的子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰不同的子序列日期:2024-10-18想法:dp[i][j]表示以s[i-1],t[j-1]结尾的s,t自学列中满足s的子序列为t的个数,如果s[i-1],t[j-1]相等,那么个数应该跟双方上一个结尾状态dp[i-1][j-......