# CSPT13 Build Week 3 ## [Odd Even Linked List](https://leetcode.com/problems/odd-even-linked-list) ``` """ Understand: Empty list Odd number list Input: 1->2->3 Output: 1->3->2 Even number list Input: 1->2->3->4 Output: 1->3->2->4 Plan: Use dummy-head to create two lists with even and odd elements Append even list to end of odd list """ # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def oddEvenList(self, head: ListNode) -> ListNode: if head == None: return None oddDummyHead = ListNode(-1) oddCurr = oddDummyHead evenDummyHead = ListNode(-1) evenCurr = evenDummyHead counter = 1 curr = head while curr != None: if counter % 2 == 0: evenCurr.next = curr evenCurr = evenCurr.next else: oddCurr.next = curr oddCurr = oddCurr.next counter += 1 temp = curr.next curr.next = None curr = temp oddCurr.next = evenDummyHead.next return oddDummyHead.next ``` ## [Remove Nth Node](https://leetcode.com/problems/remove-nth-node-from-end-of-list) ``` """ Understand: Input: 1->2->3, n = 1 1->2 Input: 1->2->3, n = 2 1->3 Input: 1->2->3, n = 3 2->3 Plan: Use dummy head + two-pointer technique to remove the nth node You can also traverse the list twice to get the length so you know which node to remove """ # 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: ListNode, n: int) -> ListNode: if head == None: return None dummyHead = ListNode(-1) dummyHead.next = head left = right = dummyHead for i in range(n): right = right.next while right.next != None: left = left.next right = right.next left.next = left.next.next return dummyHead.next ```