leetcode
千里足行~始于足下
坚持做喜欢的事!
展开
-
Leetcode题目:python实现二叉树展开为链表(先序遍历+ 树结构)
思路:1.明确单链表的顺序是先序遍历的结果:根左右,保存到result中。2.明确最终返回的不是链表,而是二叉树,只是树的左节点为空。3.遍历result中的树节点,依次的左子树为空,右子树为下一个结点。4.此时的root就是最终的二叉树。class Node: def __init__(self,value=None,left=None, right=None): self.value = value self.left = left ..原创 2022-05-05 21:00:00 · 766 阅读 · 0 评论 -
Leetcode题目:python实现反转链表(遍历+拼接+反转操作)
思路:1.left==right,返回原链表2.left <> right,添加虚拟头结点3.保存子链表的前一个指针和后一个指针,用于拼接反转后的子链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:..原创 2022-05-01 20:20:04 · 1138 阅读 · 0 评论 -
Leetcode题目:python实现分割链表(遍历+比较+拼接)
题目:分割链表思路:感觉题目的例子不是很好,最后的这组数据,很能反应题目中的要点:小于x的放到≥\geq≥x的前面。遍历链表的值,小于x的放一个链表,≥\geq≥x的放另一个链表,再拼接2个链表。class Solution: def partition(self, head: ListNode, x: int) -> ListNode: p=less=ListNode(0) q=more=ListNode(0) while h原创 2022-05-01 18:56:17 · 1155 阅读 · 0 评论 -
Leetcode题目:python实现删除排序链表中的重复元素(遍历+循环)
题目是不保留重复元素 def deleteDuplicates(self, head: ListNode) -> ListNode: dummy = ListNode(0) slow = dummy fast = head while fast != None: # 是否快进的标志 flag = False while fast.next !=None and原创 2022-05-01 15:32:18 · 1047 阅读 · 0 评论 -
Leetcode题目:python实现 旋转链表(遍历+循环)
题目: 旋转链表思路:1.首先获取链表的长度,判断旋转次数k和长度的关系,得到实际旋转次数 k=mod(k,length)k = mod(k,length)k=mod(k,length)。2.对链表执行k次往右移动一次的操作。class Solution: def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]: if head == None or head.ne原创 2022-04-27 21:12:44 · 1344 阅读 · 0 评论 -
Leetcode题目:python实现K个一组翻转链表(遍历+拼接+反转操作)
题目:K 个一组翻转链表思想:遍历链表,计数k个后,记住K个结点的首尾节点传递给反转函数,返回反转后链表的首尾结点,再拼接到原来的链表.class Solution: def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]: count = 0 result = ListNode() result.next = head原创 2022-04-26 20:07:17 · 1050 阅读 · 0 评论 -
Leetcode题目:python实现合并两(K)个有序链表(链表遍历+比较操作)
题目:合并两个有序链表思路:1.当一个为空,另一个不为空时,直接返回。2.如果两个链表不为空,比较2个头结点,不确定谁是最终的头结点,需定义一个新链表保存结果。3.当移动指针一个为空,另一个不为空时,直接将不为空的指针返回给新链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val#原创 2022-04-25 20:00:00 · 1392 阅读 · 0 评论 -
Leetcode题目:python实现两两交换链表中的节点(指针交换操作)
题目:两两交换链表中的节点思路(具体见下图):1.头节点会变化,所以要增加虚拟头节点p2.两两交换,1,2,3,4的顺序不能发生变化,先执行1和3 会产生环,陷入死循环。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Soluti原创 2022-04-24 20:23:43 · 619 阅读 · 0 评论 -
Leetcode题目:python实现删除链表的倒数第N个结点(双指针操作)
题目:删除链表的倒数第N个结点思路:1.若链表为空,或者k<0, 则返回原链表。2.两个指针p,q,先让指针p往前走n步,这样就保持p,q指针相差n个数。。3.此时p与q一起各往前一步一步走,当p指向空时,q指向倒数第n个结点。注意点:判断指针p的状态的临界点当p为None时,t<n,不用删除,返回原链表.当p为None时,t=n, 删除第一个结点。当p.next为空时,删除的时链表的中间结点。"===============================题目解答==原创 2022-04-24 15:51:21 · 859 阅读 · 0 评论 -
Leetcode题目:python 实现链表题目合集(边做边更新)
思路及注意点(新手走的弯路):1.一定要明确l1,l2链表是不可以在尾部加新节点的,因为最后一个指针值为None。2.保存结果的链表必须满足在尾部添加节点,因为进位的时候要加1,利用ListNode()可以完成动态添加节点。3.遍历2个链表,先走完的默认值为0,当另一个也走完的时候,一定要注意不要再加新节点了,此可结果链表的长度等于l1,l2中最长的那个。4.遍历完后,判断是否需要进位,进位则加一个新节点,并赋值为1。下面的程序是调试的所有代码。"=====================..原创 2022-04-22 08:01:14 · 865 阅读 · 0 评论