19.删除链表的倒数第N个结点
题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
示例
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
思路
删除倒数第n个结点,则对倒数第n-1个结点进行操作,使用双指针的方法找,为了方便返回头节点,另外再建一个哨兵结点。
算法
1.建立哨兵结点,并且快指针和慢指针都指向哨兵结点,另外设立一个快结点的计数器
2.快结点走,计数器+1,如果计数器大于n则慢结点也走
3.判断快结点是否走到终点,没有就继续执行2,走到终点执行4
4.删除慢结点的下个结点
5.返回哨兵节点的下个结点
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
newHead = ListNode()
newHead.next = head
quick_q = newHead
slow_q = newHead
count = 0
while quick_q.next:
quick_q =quick_q.next
count +=1
if count>n:
slow_q= slow_q.next
if slow_q.next.next:
slow_q.next = slow_q.next.next
else:
slow_q.next = None
return newHead.next
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。