Python 中移除連結串列的倒數第 N 個節點


假設我們有一個連結串列。我們必須移除連結串列的倒數第 N 個節點,然後返回其頭部。因此,如果列表類似於 [1, 2, 3, 4, 5, 6] 並且 n = 3,則返回的列表將為 [1, 2, 3, 5, 6]。

為了解決這個問題,我們將遵循以下步驟:

  • 如果頭部之後沒有節點,則返回 None
  • front := head,back := head,counter := 0,found := false
  • 當 counter <= n 時
    • 如果 front 不存在,則將標誌設定為 true,並退出迴圈
    • front := front 的下一個節點,並將 counter 加 1
  • 當 front 存在時
    • front := front 的下一個節點
    • back := back 的下一個節點
  • 如果標誌為 false,則
    • temp := back 的下一個節點
    • back 的下一個節點 := temp 的下一個節點
    • temp 的下一個節點 := None
  • 否則 head := head 的下一個節點
  • 返回 head

示例(Python)

讓我們看看下面的實現,以便更好地理解:

 線上演示

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
   print(']')
class Solution(object):
   def removeNthFromEnd(self, head, n):
      if not head.next:
         return None
      front=head
      back = head
      counter = 0
      flag = False
      while counter<=n:
         if(not front):
            flag = True
            break
         front = front.next
         counter+=1
      while front:
         front = front.next
         back = back.next
      if not flag:
         temp = back.next
         back.next = temp.next
         temp.next = None
      else:
         head = head.next
      return head
head = make_list([1,2,3,4,5,6])
ob1 = Solution()
print_list(ob1.removeNthFromEnd(head, 3))

輸入

[1,2,3,4,5,6]
3

輸出

[1,2,3,5,6]

更新於:2020年4月27日

604 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告