feat(528-swapping-nodes-in-a-ll): add py3 optimal solution

This commit is contained in:
Sangeeth Sudheer 2022-04-04 23:14:20 +05:30
parent 2c0614e7df
commit 0730125496
2 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,25 @@
# Time: O(N)
# Space: O(1)
class Solution:
def swapNodes(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
# We are using two pointer approach here
kth_node = kth_end_node = None
n = 1
ptr = head
while ptr != None:
if n == k:
kth_node = ptr
# `kth_end_node` ptr will only start moving once
# we've traversed k nodes from the beginning of the
# linked list
if n >= k:
kth_end_node = head if kth_end_node is None else kth_end_node.next
n += 1
ptr = ptr.next
kth_node.val, kth_end_node.val = kth_end_node.val, kth_node.val
return head

14
notes/linked_lists.md Normal file
View File

@ -0,0 +1,14 @@
---
category: ds
title: Linked Lists
---
# Linked Lists
## Finding nth node from beginning and nth node from end
Use two pointer approach to avoid extra space. Initialize the `kth_node_from_end` pointer when the `tmp` pointer reaches `kth` node and keep incrementing from there on.
### Related problems
- https://leetcode.com/problems/swapping-nodes-in-a-linked-list