leetcode 每日一题 19. 删除链表的倒数第N个节点
Posted nil_f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 每日一题 19. 删除链表的倒数第N个节点相关的知识,希望对你有一定的参考价值。
两次遍历
思路:
先遍历一次得到数组长度length,第二次遍历找到位置在length-n的节点p,让p.next=p.next.next即可
代码:
# 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: result = ListNode(0) result.next = head length = 0 first = head while first: first = first.next length +=1 length -= n first = head for i in range(length-1): first = first.next first.next = first.next.next return result.next
快慢指针
两个指针距离为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: result = ListNode(0) result.next,fast,slow = head,result,result for i in range(n): fast = fast.next while fast: fast = fast.next slow = slow.next if fast else slow slow.next = slow.next.next return result.next
以上是关于leetcode 每日一题 19. 删除链表的倒数第N个节点的主要内容,如果未能解决你的问题,请参考以下文章
《LeetCode之每日一题》:109.删除链表的倒数第 N 个结点
《LeetCode之每日一题》:98.删除排序链表中的重复元素
《LeetCode之每日一题》:288.删除排序链表中的重复元素