Suzy找到实习了吗Day 3 | 链表开始啦 203移除链表元素 707设计链表 206 反转链表
定义链表的结构
class ListNode:def __init__(self, val, next=None): #构造函数self.val = valself.next = next
尾部node.next=None,不是等于null
203移除链表元素
My trial(not ac)
我出现的问题是没有将规则分类好,所以处理边界问题或者一些特殊的cases会报错
Rule
针对链表移除问题
- 对非头结点移除,需要将prenode.next->curnode.next
- 对于头节点的移除,直接将head更新为head.next
- 如果采取虚拟头结点的方式,则可以合并规则,因为任何结点(包含头结点)的删除都可以用规则1
Finally
# Definition for singly-linked list.
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = next
class Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:dummyhead=ListNode(0,head)prenode=dummyheadcurnode=dummyhead.nextif(prenode.next==None):return headwhile(curnode!=None):number=curnode.val# print(curnode.val)if(number!=val):prenode=curnode #保存上一个nodecurnode=curnode.next #往前走一步else:#开始删if(curnode.next==None):prenode.next=Nonecurnode=prenode.nextelse:prenode.next=curnode.nextcurnode=curnode.nextreturn dummyhead.next
- number=curnode.val:必须要在判断了curnode!=none的情况下才可以取值
- 最后的返回值是dummy.next,这样不管该数组是不是被删完了,都规则统一,如果没有被删完,dummyhead.next就是真正的head,如果被删完了,dummyhead.next=none,即空链表。
707设计链表
一开始没有自己定义node的数据类型,所以不知道怎么下手。看了解析
My trial
#define my node
class Node:def __init__(self, val, next=None): #构造函数self.val = valself.next = next
class MyLinkedList:def __init__(self):#因为下面有删除操作,所以设置了一个虚拟结点self.dummyhead=Node(0,None)self.count=0def get(self, index: int) -> int:if(index<0 or index>self.count-1):return -1count=0node=self.dummyhead.nextres=node.valif node==None:return -1while(count<index):count+=1node=node.next return node.valdef addAtHead(self, val: int) -> None:head=Node(val,None)head.next=self.dummyhead.nextself.dummyhead.next=headself.count+=1def addAtTail(self, val: int) -> None:tail=Node(val,None)pointer=self.dummyheadwhile(pointer.next!=None):pointer=pointer.nextpointer.next=tailself.count+=1def addAtIndex(self, index: int, val: int) -> None:if(index>self.count or index<0):#!!!!当index=count是就表示加在末尾 不应该返回returnnewnode=Node(val,None)pointer=self.dummyheadcount=-1while(count<index-1):count+=1pointer=pointer.nextnewnode.next=pointer.nextpointer.next=newnodeself.count+=1def deleteAtIndex(self, index: int) -> None:if(index>self.count-1):returnpointer=self.dummyheadcount=-1while(count<index-1):count+=1pointer=pointer.nextif pointer.next.next==None:pointer.next=Noneelse:pointer.next=pointer.next.nextself.count-=1def printlink(self):pointer=self.dummyhead.nextwhile(pointer!=None):print(pointer.val)pointer=pointer.next# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)
好不容易,debug了好久好久
- 一些边界情况一定要想到,比如add at index,当index不合法的时候,应该不做动作。但是index可以取边界,因为这样表示加在末尾
- 一开始没有加self.count记录链表的长度,走了很多弯路。链表一定要初始化的两个参数:虚拟头结点,长度。
206 反转链表
一开始记录了3个指针,然后就晕了。
链表知识性错误!!!!big 错误!!!!
新的链表的尾部一定要设置tail.next=None
不然一直一直陷入死循环!!!!!!!!
感觉我用while(condition)经常出错
用while(True):
if(condition):
break
避免错误!!!
Suzy找到实习了吗Day 3 | 链表开始啦 203移除链表元素 707设计链表 206 反转链表相关推荐
- 递归删除单链表中所有值为x的元素_如何纯递归反转链表的一部分
读完本文,你可以去力扣拿下如下题目: 92.反转链表II ----------- 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是 ...
- LeetCode 206. 反转链表 Reverse Linked List
5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...
- Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素
Suzy找到实习了吗 | 704. 二分查找.27. 移除元素 Leetcode 704:二分搜索 收获 Divide and conquer Recursive relation Python 3 ...
- 【Java】LeetCode 206 反转链表
题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...
- 【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点
目录 一.力扣第206题:反转链表 1.思路一 2.思路二 二.力扣第876题:链表的中间结点 1.思路一 2.思路二 总结 一.力扣第206题:反转链表 题目链接:206. 反转链表 - 力扣(Le ...
- LeetCode 206. 反转链表(Reverse Linked List) 16
206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...
- LeetCode-链表-206. 反转链表
描述 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:h ...
- LeetCode Algorithm 206. 反转链表
206. 反转链表 Ideas 关于链表的题目其实画个图就很清晰了. 可以想象成两个部分,左边是已经完成翻转的链表,以pre为头结点,右边是还未翻转的链表,以cur为头结点,每次获取cur的下一个结点 ...
- 206. 反转链表 golang
206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...
最新文章
- 测试进度需要考虑的问题
- Android Context.bindService 返回 false 问题
- SAP CRM Opportunity response area
- 10kv电压互感器型号_电压互感器型号大全
- P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】
- ORACLE功能GREATEST功能说明具体实例
- 如何从超级用户进入非超级用户
- Atitit html5 Canvas 如何自适应屏幕大小
- 未在本地计算机上注册“OraOLEDB.Oracle”提供程序
- U-Net模型搭建python实现
- html静态页面存储,页面保存为静态页面
- 机顶盒(Iptv)EPG页面实现视频播放
- 固态硬盘装到服务器上影响寿命吗,谈谈SSD固态硬盘的寿命问题
- 与门,AND Gate
- 灰度差分统计法计算图像的对比度
- 多巴胺所表达的prediction error信号
- pytorch加载自己的数据集,数据集载入-视频合集
- 并查集的一些个人观点 以及克鲁斯卡尔算法的详解
- 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。,java初级面试笔试题
- 基金投资从入门到精通