Remove Node From End of Linked List
You are given the beginning of a linked list head, and an integer n.
Remove the nth node from the end of the list and return the beginning of the list.
Example 1:
Input: head = [1,2,3,4], n = 2
Output: [1,2,4]
Example 2:
Input: head = [5], n = 1
Output: []
Example 3:
Input: head = [1,2], n = 2
Output: [2]
Constraints:
The number of nodes in the list is sz.
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Solution
The key is to find the target node. To do this, we can use two pointers algorithm. Let first point steps nnn times first, and then both pointers step together until the first one meets the end.
Code
An additional head node may be helpful. Here I just specially judge the situation that the node to be removed is the head node.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
p1, p2 = head, head
pre = ListNode(0)
step = 0
while p1.next:
p1 = p1.next
step += 1
if step >= n:
pre = p2
p2 = p2.next
print(p1.val, p2.val, pre.val)
if p2 == head:
return head.next
pre.next = p2.next
return head