删除链表的倒数第N个节点
题目描述:
给定一个链表,删除链表的倒数第 n
个节点,并且返回链表的头结点。
示例 :
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
解题思路:
利用双指针来表示倒数第N个的位置
- 首先先创建一个虚拟的头结点
dummy
- 然后创建两个指针
p1
,p2
指向头结点 - 先将
p2
指针移动n
步,前提是n小于链表长度 - 然后同时将
p1
,p2
指针向后移动,直到p2
到达链表的末尾 - 此时
p1
指针所指的位置,就是链表倒数第N个节点的位置 - 然后将该节点删除
p1.next = p1.next.next
- 返回新生成的链表
Python源码:
# 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 not head or not head.next:
return None
# 创建虚拟头结点
dummy = ListNode(-1)
dummy.next = head
# 创建两个指针,并将指针p2移动n步
p1, p2 = dummy, dummy
for i in range(n):
p2 = p2.next
while p2.next:
p1, p2 = p1.next, p2.next
p1.next = p1.next.next
return dummy.next
欢迎关注我的github:https://github.com/UESTCYangHR