删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
方法一:需要两次遍历
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
"""
head:是一个头结点
"""
if head.next == None: # 判断链表是否为空或者只有一个节点
head = None
return head
tump = head
length = 0
while tump != None: # 第一次遍历,的处链表的长度length
tump = tump.next
length += 1
tump = head
if length == n: # 判断删除的是否为第一个节点
head = head.next # 如果删除第一个节点,就将head指向第二个节点
return head
for i in range(length - n - 1): # 得到第n-1个节点
tump = tump.next
tump.next = tump.next.next # 将第n-1个节点指向第n+1个节点,即删除了第n个节点
return head