移除鏈表倒數第n個元素

移除鏈表倒數第n個元素

Remove Nth Node From End of List

  • 給定一個鏈表,移除倒數第n個元素,返回鏈表頭部。
  • Given a linked list, remove the nth node from the end of list and return its head.

Note:
Given n will always be valid.
Try to do this in one pass.

example 1

Given linked list: 1->2->3->4->5, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5.

example 2

Given linked list: 1, and n = 1.
output: None

example 3

Given linked list: 1->2->3, and n = 3.
output: 2->3

思路

  1. 兩個指針,fastslowfast指向slow之後n個位置,同步移動fastslow,當fast.next爲null的時候,slow.next即爲要移除的那個元素,只需要slow.next = slow.next.next即可,時間複雜度O(n)
  2. 注意考慮n爲鏈表長度的情況,即移除首個元素

代碼

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
        a = b = head
        for i in range(n):
            b = b.next
        if not b:
            return head.next
        while b.next:
            a = a.next
            b = b.next
        a.next = a.next.next
        return head

本題以及其它leetcode題目代碼github地址: github地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章