文章目录
链表定义
链表的操作
遍历
当node1指向node2时候,因为数值1没有变量指向它,它就变成了垃圾。python有一个进程专门处理垃圾,垃圾回收。定期启动这个进程去清除。
插入
查找
174 · 删除链表中倒数第n个节点
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
def removeNthFromEnd(self, head, n):
# write your code here
count = 0
cur, pre = head, head
while cur:
count += 1
cur = cur.next
if count == n:
head = head.next
return head
for _ in range(count - n - 1):
pre = pre.next
pre.next = pre.next.next
return head
下面是官方答案,用了2个指针,很巧妙。
class Solution(object):
'''
题意:删除链表中倒数第n个结点,尽量只扫描一遍。
使用两个指针扫描,当第一个指针扫描到第N个结点后,
第二个指针从表头与第一个指针同时向后移动,
当第一个指针指向空节点时,另一个指针就指向倒数第n个结点了
'''
def removeNthFromEnd(self, head, n):
res = ListNode(0)
res.next = head
tmp = res
for i in range(0, n):
head = head.next
while head != None:
head = head.next
tmp = tmp.next
tmp.next = tmp.next.next
return res.next