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]