给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
# temp = head
# count = 0
# while temp!= None:
# temp = temp.next #扫描操作,temp为扫描指针
# count += 1
# temp = head #重新赋值
# index = 0
# if count== n:
# return head.next #只有两个元素,删除第一个即可
# else:
# while index!=(count-n-1): #
# temp = temp.next
# index += 1
# temp.next = temp.next.next # 一般情况下的元素删除
# return head
length = 0
p = head
while p: #遍历操作
length += 1
p = p.next
idx = length - n #要删除的位置
#pre.next = pre.next.next 可以删除指定位置
p = head #重新赋值
if idx == 0:
return p.next
for i in range(length):
if i == idx - 1: #删除位置的前一个位置,
p.next = p.next.next #删除指定位置
return head
else:
p = p.next #继续遍历