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]