定义链表的结构

class ListNode:def __init__(self, val, next=None): #构造函数self.val = valself.next = next

尾部node.next=None,不是等于null

203移除链表元素

My trial(not ac)

我出现的问题是没有将规则分类好,所以处理边界问题或者一些特殊的cases会报错

Rule

针对链表移除问题

  1. 对非头结点移除,需要将prenode.next->curnode.next
  2. 对于头节点的移除,直接将head更新为head.next
  3. 如果采取虚拟头结点的方式,则可以合并规则,因为任何结点(包含头结点)的删除都可以用规则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
  1. number=curnode.val:必须要在判断了curnode!=none的情况下才可以取值
  2. 最后的返回值是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了好久好久

  1. 一些边界情况一定要想到,比如add at index,当index不合法的时候,应该不做动作。但是index可以取边界,因为这样表示加在末尾
  2. 一开始没有加self.count记录链表的长度,走了很多弯路。链表一定要初始化的两个参数:虚拟头结点,长度。

206 反转链表

一开始记录了3个指针,然后就晕了。

链表知识性错误!!!!big 错误!!!!

新的链表的尾部一定要设置tail.next=None
不然一直一直陷入死循环!!!!!!!!

感觉我用while(condition)经常出错

用while(True):
if(condition):
break
避免错误!!!

Suzy找到实习了吗Day 3 | 链表开始啦 203移除链表元素 707设计链表 206 反转链表相关推荐

  1. 递归删除单链表中所有值为x的元素_如何纯递归反转链表的一部分

    读完本文,你可以去力扣拿下如下题目: 92.反转链表II ----------- 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是 ...

  2. LeetCode 206. 反转链表 Reverse Linked List

    5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...

  3. Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素

    Suzy找到实习了吗 | 704. 二分查找.27. 移除元素 Leetcode 704:二分搜索 收获 Divide and conquer Recursive relation Python 3 ...

  4. 【Java】LeetCode 206 反转链表

    题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...

  5. 【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点

    目录 一.力扣第206题:反转链表 1.思路一 2.思路二 二.力扣第876题:链表的中间结点 1.思路一 2.思路二 总结 一.力扣第206题:反转链表 题目链接:206. 反转链表 - 力扣(Le ...

  6. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  7. LeetCode-链表-206. 反转链表

    描述 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:h ...

  8. LeetCode Algorithm 206. 反转链表

    206. 反转链表 Ideas 关于链表的题目其实画个图就很清晰了. 可以想象成两个部分,左边是已经完成翻转的链表,以pre为头结点,右边是还未翻转的链表,以cur为头结点,每次获取cur的下一个结点 ...

  9. 206. 反转链表 golang

    206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...

最新文章

  1. 测试进度需要考虑的问题
  2. Android Context.bindService 返回 false 问题
  3. SAP CRM Opportunity response area
  4. 10kv电压互感器型号_电压互感器型号大全
  5. P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】
  6. ORACLE功能GREATEST功能说明具体实例
  7. 如何从超级用户进入非超级用户
  8. Atitit html5 Canvas 如何自适应屏幕大小
  9. 未在本地计算机上注册“OraOLEDB.Oracle”提供程序
  10. U-Net模型搭建python实现
  11. html静态页面存储,页面保存为静态页面
  12. 机顶盒(Iptv)EPG页面实现视频播放
  13. 固态硬盘装到服务器上影响寿命吗,谈谈SSD固态硬盘的寿命问题
  14. 与门,AND Gate
  15. 灰度差分统计法计算图像的对比度
  16. 多巴胺所表达的prediction error信号
  17. pytorch加载自己的数据集,数据集载入-视频合集
  18. 并查集的一些个人观点 以及克鲁斯卡尔算法的详解
  19. 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。,java初级面试笔试题
  20. 基金投资从入门到精通

热门文章

  1. Unity游戏开发面试问题总结(含答案)
  2. Python爬虫新手教程:微医挂号网医生数据抓取
  3. Apollo Planning决策规划算法代码详细解析 (1):Scenario选择
  4. GM8913型DC平衡双向控制器LVTTL转FPD-LINK
  5. 听李善友讲移动互联网颠覆式创新
  6. 充电IC和电量计的驱动调试
  7. vs2017取消起始页(设定起始页)/(.ashx文件的添加)
  8. Meta:不用插管!AI看看脑电图就知道你在想啥
  9. 大二学计算机专业职业规划,大学生计算机专业职业生涯规划2000字
  10. 深度学习训练时GPU利用率忽高忽低问题