版权声明:本文章为原创,未经许可不得转载 https://blog.csdn.net/weixin_41864878/article/details/91042588
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
用两个指针,第一个指针先走步,之后建立第二个指针,然后两个指针一起走,直到第一个指针走到末尾,此时第二个指针就在倒数第n-1的位置,把n-1的next和next.next连在一起就ok
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
steps = 0
node = head
if not node or not node.next: return None #只有1个节点时也返回None
while steps < n-1 and node:
node = node.next
steps+=1
rem = head
node = node.next # node再走一步
if not node: #如果这时已经到了末尾,说明要删除的是头节点
head = head.next
return head
while node.next:
node = node.next
rem = rem.next
if n == 1: rem.next = None #如果n=1,说明要删除的是尾节点
else: rem.next = rem.next.next
return head