Add solution for LL: remove n'th node from end of LL
This commit is contained in:
parent
ee33a389a2
commit
5ad7e901cd
3 changed files with 120 additions and 0 deletions
|
@ -0,0 +1,37 @@
|
|||
# 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
|
||||
|
||||
# Edge cases
|
||||
## size of LL == 1
|
||||
return None
|
||||
|
||||
## n = 1
|
||||
return head.next
|
||||
|
||||
# Solution
|
||||
- Save head and return it after algo
|
|
@ -0,0 +1,43 @@
|
|||
from typing import List, Optional
|
||||
|
||||
|
||||
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]:
|
||||
if not head:
|
||||
return None
|
||||
if head.next is None:
|
||||
return None
|
||||
perm_head = head
|
||||
nodes = []
|
||||
while head:
|
||||
nodes.append(head)
|
||||
head = head.next
|
||||
if n == 1:
|
||||
nodes[-2].next = None
|
||||
return perm_head
|
||||
if n == len(nodes):
|
||||
return perm_head.next
|
||||
counter = 1
|
||||
for i in range(len(nodes) - 1, 0, -1):
|
||||
if counter == n:
|
||||
nodes[i - 1].next = nodes[i + 1]
|
||||
counter += 1
|
||||
return perm_head
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
s = Solution()
|
||||
e3 = ListNode(3, None)
|
||||
e2 = ListNode(2, e3)
|
||||
e1 = ListNode(1, e2)
|
||||
e0 = ListNode(0, e1)
|
||||
fe = s.removeNthFromEnd(e0, 1)
|
||||
while fe:
|
||||
print(f"{fe.val}")
|
||||
fe = fe.next
|
|
@ -0,0 +1,40 @@
|
|||
from typing import List, Optional
|
||||
|
||||
|
||||
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]:
|
||||
N = 0
|
||||
cur = head
|
||||
while cur:
|
||||
N += 1
|
||||
cur = cur.next
|
||||
|
||||
removeIndex = N - n
|
||||
if removeIndex == 0:
|
||||
return head.next
|
||||
|
||||
cur = head
|
||||
for i in range(N - 1):
|
||||
if (i + 1) == removeIndex:
|
||||
cur.next = cur.next.next
|
||||
break
|
||||
cur = cur.next
|
||||
return head
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
s = Solution()
|
||||
e3 = ListNode(3, None)
|
||||
e2 = ListNode(2, e3)
|
||||
e1 = ListNode(1, e2)
|
||||
e0 = ListNode(0, e1)
|
||||
fe = s.removeNthFromEnd(e0, 1)
|
||||
while fe:
|
||||
print(f"{fe.val}")
|
||||
fe = fe.next
|
Loading…
Reference in a new issue