今天说下python中的链表题。
在leetcode中的链表题都是给你一个已经建造好的链表,然后让你对其进行各种变化。
比如删除某节点,倒转等等。
一般会给你几个固定方法:
- 获取当前节点值:p.val
- 表示下一个节点:p.next
- 删除某节点:p.next = p.next.next (这样原来的p.next节点就没人要了,本来是:1号节点的尾巴连着2号节点,2号节点的尾巴连着3号节点。为了删除2号节点,1号节点的尾巴直接连到了3号节点,这样2号节点就丢失了相当于被删除)
看下上面这道题,删除值为6的节点
所以答案是:
一开始把p作为首节点之前的一个新建的空节点,然后无限循环,只要p.next存在,就对p.next断言。
如果p.next的值不是目标删除值,那么就p继续往下走。
否则,就是要删除p.next,那么就用前面提到的删除方法,p.next=p.next.next。这样就把p.next给丢弃掉了。
最后,返回node.next,因为p只是个小弟,他最后已经跑到了最后,但是我们要返回的是链表,要从第一个节点,也就是抓着头给到官方判断才行,所以node一开始作为新的空节点,它的下一个是原始链表的头。所以返回node.next。
链表相对于二叉树来说要简单一点,可以作为我们测试人员从字符串/数组的算法后的可学习的领域。