![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode链表
文章平均质量分 65
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
leetcode 708 剑指 Offer II 029. 排序的循环链表 python
题目描述:题解:可以分为三种情况:1.输入head链表为空,创建一个head节点,val等于要插入的值,next指向自身,返回head。2.要插入的值在输入head链表中的某两个节点之间,即存在一个节点cur,nxt=cur,插入的值在这两个节点之之间,cur.val<=insertval<=nxt.val3.要插入的值大于当前head链表中最大值或小于链表中最小值,则应该插入的位置在head链表最大最小值之间,比如示例1,如果要插入的值是0,则应该在4和1之间。即.原创 2022-01-06 12:20:38 · 936 阅读 · 1 评论 -
leetcode445 剑指 Offer II 025. 链表中的两数相加 python
题目描述:题解:栈1.用stack1保存链表l1中节点,stack2保存链表l2中节点值。2.创建一个初始为None的节点,表示进位数字的into,初始为0.3.当stack1或stack2不为空或into不为0的时候执行加法:stack1栈顶元素值保存在a,stack2栈顶元素值保存在b,如果栈为空,则对应的值为0.4.计算a+b+into的值,(a+b+into)%10为当前位的和,(a+b+into)//10为当前位向前一位的进位,更新into。5.创建一个新节点newno原创 2022-01-05 21:08:11 · 609 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表python
题目描述:题解:参考力扣二叉搜索树的中序遍历结果就是按找从小到大排列,在对二叉搜索树进行中序遍历的同时,确定left right指针位置。1.创建一个pre节点,初始化为None。2.定义dfs函数,输入cur节点:<1>对cur.left调用dfs。<2>处理cur节点,如果此时pre为None,说明当前cur为head节点,将cur保存在head中。 否则,pre为cur在生成的链表中的前一个节点,pre.right=cur cu...原创 2021-12-08 20:58:36 · 111 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点python
题目描述:题解:1.首先遍历一次链表,获取链表长度length2.创建一个fakenode,next节点为head,node=fakehead,num记录当前node是链表中第几个节点,当node=length+1-k时,将fakenode.next设为node。class Solution(object): def getKthFromEnd(self, head, k): node1 = head length = 0 whi原创 2021-12-04 11:33:34 · 290 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点python
题目描述:题解:1.创建一个fakehead,fakehead.next = head2.node1=fakehead node2=head3.判断node2.val是否为val,如果是,则说明此时node2对应的就是需要删除的节点,node1.next=node2,否则node1 node2均向后移动。4.返回fakehead.next,不可以直接返回head,否则在head节点需要被删除时会出错。...原创 2021-12-04 11:21:04 · 586 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制python
题目描述:题解:参考剑指 Offer 35. 复杂链表的复制_大白能的博客-CSDN博客1.先为链表中每个节点创建一个复制节点,此时只复制节点值。2.创建random关系,指向原random节点之后的复制节点。3.拆分完成节点复制后的链表。class Solution(object): def copyRandomList(self, head): if head==None: return None cur ..原创 2021-11-25 10:49:48 · 416 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表python
题目描述:题解一:通过思路:1.从head节点开始遍历链表,把每个节点的值保存在数组numres中。2.反转numsres,作为返回结果。class Solution(object): def reversePrint(self, head): numres = [] while head: numres.append(head.val) head = head.next nu.原创 2021-11-25 09:19:03 · 517 阅读 · 0 评论 -
leetcode 61. 旋转链表 python
题目描述:力扣题目要求输入一个链表的头节点head和一个整数k,输出将链表右移k个位置的链表。题解:基本思路:1.确定输入链表的长度length。2.将第length-k个节点的next节点设为空。3.将第length-k+1个节点作为新的链表的头节点,将链表中最后一个节点的next设为原来的head节点。需要注意的部分:1.如果输入链表只有一个节点或者为空,无论k为多少直接返回head.2.当k比链表长度length大时,旋转k位的结果和旋转k%leng..原创 2021-11-17 17:09:26 · 410 阅读 · 0 评论 -
leetcode876. 链表的中间结点python
题目描述:题解一:一种很笨的办法:1.先遍历一次链表,记录链表的长度listlen。2.判断中间节点mid的位置,如果listlen为奇数,则mid=(listlen+1)/2,否则mid=listlen/2+1。3.再次从head开始依次搜索链表,根据mid的位置确定中间节点。class Solution(object): def middleNode(self, head): if head.next == None: re.原创 2021-10-08 15:57:43 · 354 阅读 · 0 评论 -
leetcode 86. 分隔链表 python
题目描述:题解:创建两个链表,一个保存原始链表中值小于x的节点,一个保存原始链表中值大于等于x的节点,然后把后一个链表接在前一个链表之后。1.创建两个链表smallerhead,greaterhead,一个保存原始链表中值比x小的节点,一个保存原始链表中值大于或等于x 的节点。2.smaller=smallerhead greater=greaterhead。3.对原始链表中每个节点进行判断,如果当前head.val<x,则smaller.next=head,同时smal.原创 2021-09-26 11:32:29 · 109 阅读 · 0 评论 -
leetcode 24. 两两交换链表中的节点 python
题目描述:题解:1.创建一个虚拟头节点fakehead,fakehead.next = head。2.初始时cur = fakehead,每次交换cur.next和cur.next.next两个节点。3.cur = cur.next.next,继续处理之后的两个节点。其中cur.next与cur.next.next的交换过程一个示例如下:此时cur = fakehead,cur.next=1 cur.next.next=21.tmp1 = cur.next=1 t..原创 2021-09-24 15:28:12 · 194 阅读 · 0 评论 -
leetcode 148. 排序链表 python
题目描述:题解一(通过):采用归并排序,归并排序算法可以参考:归并排序算法_ganggang的博客-CSDN博客1.sortList函数: <1>如果head为空或head.next为空,则直接返回,对用归并排序中已经划分到单个数字的情况。 <2>否则先确定链表长度length,将链表划分为左右两部分。 <3>对lefthalf right分别调用sortList继续划分。 <4>对划分完成的righthalf...原创 2021-09-23 20:33:20 · 273 阅读 · 0 评论 -
leetcode 237. 删除链表中的节点 pyt
题目描述:题解:这个题目很神奇,要求是删除给定链表中的一个指定节点,但是只给了一个要删除的节点(ListNode)类型,没有给定链表的head节点。。。看了leetcode上的评论发现,只要将node节点从链表中抹去即表示了删除,因此将node的val和next都设置为node.next的val和next。class Solution(object): def deleteNode(self, node): node.val = node.next.val..原创 2021-09-22 20:07:32 · 78 阅读 · 0 评论 -
leetcode 143. 重排链表 python
题目描述:题解:1.通过slow fast指针找到链表中间位置。2.对后半部分链表进行反转。3.将前半部分链表和反转后的后半部分进行交叉。尝试一(使用链表长度作为终止判断,未通过)链表节点为偶数正确,奇数结果不正确。class Solution(object): def reorderList(self, head): head1 = head length = 0 while head1: .原创 2021-09-18 17:45:25 · 680 阅读 · 0 评论 -
leetcode 160. 相交链表 python
题目描述:思路一(超时):1.创建一个保存链表节点的list nodelist。2.先将链表A中每个节点加入nodelist。3.对链表B中每个节点,判断是否在nodelist存在,如果存在则说明找到一个交叉节点。class Solution(object): def getIntersectionNode(self, headA, headB): if headA==None or headB==None: re...原创 2021-09-17 21:19:45 · 467 阅读 · 0 评论 -
leetcode 206. 反转链表 python
题目描述:题解:class Solution(object): def reverseList(self, head): if head==None or head.next==None: return head pre = None cur = head nxt = cur.next while nxt: cur.next = pre ..原创 2021-09-17 20:06:15 · 120 阅读 · 0 评论 -
leetcode 234. 回文链表 python
题目描述:题解:最简单的方式,把链表中的值都读取到一个数组nums中,然后再判断该数组中对应位置值是否相同。class Solution(object): def isPalindrome(self, head): nums = [] while head: nums.append(head.val) head = head.next n = len(nums) for.原创 2021-09-17 17:36:00 · 251 阅读 · 0 评论 -
leetcode 82. 删除排序链表中的重复元素 II python
题目描述:题解:1.使用一个dict numdict记录每个数字出现的次数。2.将numdict中只出现了一次的数字保存在list kept中。3.对kept进行排序。4.对kept中的数构造链表。5.注意:需要注意kept为空或只有一个元素的情况。class Solution(object): def deleteDuplicates(self, head): numdict = {} while head: ...原创 2021-09-17 11:25:41 · 100 阅读 · 0 评论 -
leetcode 83. 删除排序链表中的重复元素python
题目描述:题解:1.将链表中不重复的数值保存在list nums中。2.对nums中的元素构造链表。class Solution(object): def deleteDuplicates(self, head): if head==None: return head nums = [] while head!=None: if head.val not in nums:原创 2021-09-16 21:01:51 · 166 阅读 · 0 评论 -
leetcode 142. 环形链表 II python
题目描述:题解:参考:【leetcode】Python实现-141.环形链表_神不烦-CSDN博客_python 环形链表利用快慢指针的性质:快慢指针相遇的位置到环入口的距离=链表头到环入口的距离1.一个快指针fast=head.next.next,每次移动两个节点。一个慢指针slow=head.next,每次移动一个节点。2.在while循环中找到slow fast相遇位置,此时slow=fast3.设置flag从head开始,slow和flag不断向后一.原创 2021-09-16 20:23:52 · 182 阅读 · 0 评论 -
leetcode 141. 环形链表 python
题目描述:题解一(快慢指针):参考:【leetcode】Python实现-141.环形链表_神不烦-CSDN博客_python 环形链表1.创建一个指针slow,一个指针fast。slow每次向后移动一个节点,fast每次向后移动两个节点。2.如果链表有环,则slow fast必然会相遇。注意while循环条件为fast!=None and fast.next!=Noneclass Solution(object): def hasCycle(se...原创 2021-09-16 17:14:36 · 175 阅读 · 0 评论 -
leetcode 19. 删除链表的倒数第 N 个结点 python
题目描述:题解一(通过):1.把输入链表中的数值依次读取到一个list nums中。2.如果n!=1,构造一个val=nums[-1]的node1,如果n=1,则构造val=nums[-2]的node1。3.从nums倒数第二个位置的数值开始,如果不是需要删除的节点,则构造node val=nums[i] next=node1 更新node1=node需要注意的有:1.如果原来链表里只有一个节点,直接返回None。2.如果原来链表两个节点,判断n=1/n=2,直接返...原创 2021-09-16 16:21:39 · 140 阅读 · 0 评论 -
leetcode 21. 合并两个有序链表python
题目描述:题解一(通过):1.将l1 l2中所有节点值加入list nums中,对nums按照从小到大排序。2.创建ListNode node1,其val值为nums[-1],即排序之后最后一个数。3.从nums倒数第二个数开始,创建ListNode node,val值为nums[i],next=node1,然后将node1更新为node。即从排序之后链表的最后一个节点开始创建。需要注意的是:要考虑l1 l2均为空或l1 l2一共只有一个节点的特殊情况。class Soluti原创 2021-09-16 10:44:28 · 88 阅读 · 0 评论