首页 > 其他分享 >基础题链表203、206

基础题链表203、206

时间:2023-08-25 16:34:51浏览次数:41  
标签:pre 203 cur val 206 self head next 链表

203. 移除链表元素

也可以用栈解决:(程序员小熊)

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, val=0, next=None):
 4 #         self.val = val
 5 #         self.next = next
 6 class Solution:
 7     def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
 8         # #1.双指针:先判断第一个结点是否等于val
 9         while head and head.val == val: #head可以为空 #所有结点都是待删结点则不会进入第二个循环
10             head = head.next
11         
12         pre, cur = head, head
13 
14         while cur:
15             if cur.val == val:
16                 pre.next = cur.next
17             else:
18                 pre = cur
19             cur = cur.next
20 
21         return head
22 
23         #虚拟头节点(哨兵)可以不需要先判断头节点是否为待删的结点 这个更快一点
24         #在头节点前面加一个虚拟结点,这样头节点变成了普通结点,返回的虚拟结点的下一个结点
25         dummyHead = ListNode(-1,head) #保存虚拟头节点
26         cur = dummyHead #进行删除操作
27 
28         while cur.next: #先判断不为空
29             if cur.next.val == val:
30                 cur.next = cur.next.next #跳过
31             else:
32                 cur = cur.next #移动cur
33         
34         return dummyHead.next
 206. 反转链表
 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, val=0, next=None):
 4 #         self.val = val
 5 #         self.next = next
 6 class Solution:
 7     def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
 8         #1.双指针法,在循环体中先要保存cur.next的值 ,时间效率不高
 9         # pre = None
10         # cur = head
11 
12         # while cur: #不为空时 #递归的结束条件
13         #     #先保存cur.next值
14         #     temp = cur.next
15         #     #反转
16         #     cur.next = pre 
17         #     #更新双指针
18         #     pre = cur
19         #     cur = temp
20         
21         # return pre #递归结束条件返回值
22 
23         #2.递归 逻辑和双指针一样 运行时间快
24         return self.reverse(head,None) #先给双指针初始化
25     
26     def reverse(self, cur: ListNode, pre: ListNode):
27         #递归结束条件
28         if cur == None:
29             return pre #刚开始head为空,之间返回空
30         #保存中间值
31         temp = cur.next
32         #反转
33         cur.next = pre
34         #更新递归
35         return self.reverse(temp, cur)

 

 

标签:pre,203,cur,val,206,self,head,next,链表
From: https://www.cnblogs.com/wuyijia/p/17657145.html

相关文章

  • LeetCode-21. 合并两个有序链表(Java)
    这是我在51CTO博客开启的写作之路,第一次正式写博客记录我在LeetCode的刷题日,希望能帮助更多的小伙伴攻面自己心仪的公司offer。如下对于 LeetCode-21.合并两个有序链表,进行全面解析并小结解题思路,同学们请参考:1.题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表......
  • LeetCode-24. 两两交换链表中的节点(Golang)
    一、前言作者:bug菌博客:CSDN、掘金、infoQ、51CTO等简介:CSDN/阿里云/华为云/51CTO博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核微信公众号「猿圈奇妙屋」,免费领取简历模板/学习资料/大厂面试真题/职业规划......
  • 2065:【例2.2】整数的和
    2065:【例2.2】整数的和时间限制:1000ms      内存限制:65536KB提交数:69280   通过数:58746【题目描述】求3个整数的和。输入a、b、c这3个整数,求它们的和。【输入】3个整数。【输出】三个数的和。【输入样例】123【输出样例】6#includ......
  • 2066:【例2.3】买图书
    2066:【例2.3】买图书时间限制:1000ms      内存限制:65536KB提交数:87778   通过数:51324【题目描述】已知小明有n元,他买了一本书,这本书原价为m元,现在打8折出售。求小明还剩多少钱(保留2位小数)。【输入】输入n,m。【输出】小明还剩多少钱(保留2......
  • 2064:【例2.1】交换值
    2064:【例2.1】交换值时间限制:1000ms      内存限制:65536KB提交数:114708   通过数:62617【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【输入样例】......
  • 2061:【例1.2】梯形面积
    2061:【例1.2】梯形面积时间限制:1000ms      内存限制:65536KB提交数:156165   通过数:61875【题目描述】在梯形中阴影部分面积是150平方厘米,求梯形面积。 【输入】(无)【输出】输出梯形面积(保留两位小数)。【输入样例】(无)【输出样例】(无......
  • 2062:【例1.3】电影票
    2062:【例1.3】电影票时间限制:1000ms      内存限制:65536KB提交数:115428   通过数:68395【题目描述】已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少?【输入】输入x。【输出】人数和电影票总价,中间用一个空格隔开。【输入样例】......
  • 2063:【例1.4】牛吃牧草
    2063:【例1.4】牛吃牧草时间限制:1000ms      内存限制:65536KB提交数:81880   通过数:50598【题目描述】有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天?【输入】(无)......
  • 2060:【例1.1】计算机输出
    2060:【例1.1】计算机输出时间限制:1000ms      内存限制:65536KB提交数:166481   通过数:83042【题目描述】在屏幕上输出“HelloWorld!”。【输入】(无)【输出】(无)【输入样例】(无)【输出样例】HelloWorld!#include<iostream>intmain......
  • [DS记录] P3203 [HNOI2010] 弹飞绵羊
    (题目传送门)虽然是\(\rmLCT\)板子,但用来做分块入门如果没有修改操作,可以\(O(n)\)求出每个点的答案对于每个块里的点,预处理出它跳出这个块的步数,那么查询时就可以\(O(1)\)跳过这些块,查询的复杂度\(O(\sqrt{n})\)修改一个点时,也就是\(O(B)\)暴力修改即可令\(B=\sqrt{......