题目
给定一个链表,删除链表的倒数第 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: ListNode, n: int) -> ListNode: if head.next == None: return None deleteIndex = n deleteNode: ListNode = head rightNode = head #right先走一段 while deleteIndex > 0: deleteIndex -= 1 rightNode = rightNode.next if rightNode == None:#删除第一个节点 head = head.next return head; while rightNode.next != None: rightNode = rightNode.next deleteNode = deleteNode.next if n == 1:#删除最后一个节点 deleteNode.next = None else: deleteNode.next = deleteNode.next.next return head