Computer >> Máy Tính >  >> Lập trình >> Python

Xóa nút thứ khỏi cuối danh sách bằng Python


Giả sử chúng ta có một danh sách liên kết. Chúng ta phải xóa nút thứ N khỏi cuối danh sách, sau đó trả lại phần đầu của nó. Vì vậy, nếu danh sách giống như [1, 2, 3, 4, 5, 6] và n =3, thì danh sách trả về sẽ là [1, 2, 3, 5, 6].

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau -

  • Nếu không có nút nào sau phần đầu, thì trả về Không có
  • trước:=đầu, sau:=đầu, bộ đếm:=0 và đài phun nước:=sai
  • bộ đếm trong khi <=n
    • nếu front không hiển thị, thì hãy đặt cờ là true và thoát khỏi vòng lặp
    • front:=next of front và tăng bộ đếm lên 1
  • trong khi phía trước là hiện tại
    • front:=tiếp theo của front
    • back:=next of back
  • nếu cờ là sai, thì
    • temp:=next of back
    • next of back:=next of temp
    • tiếp theo của tạm thời:=Không có
  • nếu không thì head:=next of head
  • Quay đầu lại

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

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

Đầu ra

[1,2,3,5,6]