public ListNode DeleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode newHead = new ListNode(-1); newHead.next = head; ListNode prev = newHead; ListNode current = head; while (current != null) { if (current.next != null && current.next.val == current.val) { while (current.next != null && current.next.val == current.val) current = current.next; prev.next = current.next; current = current.next; } else { prev = prev.next; current = current.next; } } return newHead.next; }
public ListNode Partition(ListNode head, int x) { if (head == null) return null; ListNode sm = new ListNode(0); ListNode sm_tail = sm; ListNode gt = new ListNode(0); ListNode gt_tail = gt; ListNode curr = head; while (curr != null) { if (curr.val < x) { sm_tail.next = curr; curr = curr.next; sm_tail = sm_tail.next; sm_tail.next = null; } else { gt_tail.next = curr; curr = curr.next; gt_tail = gt_tail.next; gt_tail.next = null; } } sm_tail.next = gt.next; return sm.next; }
public void OJ019_RemoveNthNodeFromEndOfListTest3() { ListNode l1 = new ListNode(1); l1.next = new ListNode(2); ListNode result = new OJ019_RemoveNthNodeFromEndOfList().RemoveNthFromEnd(l1, 2); Assert.AreEqual(2, result.val); }
public ListNode RotateRight(ListNode head, int k) { if (head == null || k == 0) return head; ListNode current = head; int count = 0; while (current != null) { count++; current = current.next; } k = k % count; if (k == 0) return head; ListNode first = head; while (k-- > 0) first = first.next; ListNode second = head; while (first.next != null) { first = first.next; second = second.next; } ListNode result = second.next; first.next = head; second.next = null; return result; }
public ListNode ReverseBetween(ListNode head, int m, int n) { if (head == null) return null; ListNode prev = null; ListNode current = head; ListNode next = null; int i = 0; for (; i < m - 1; i++) { prev = current; current = current.next; } ListNode h = prev; ListNode hn = current; for (; i < n && current != null; i++) { next = current.next; current.next = prev; prev = current; current = next; } if (h != null) h.next = prev; else head = prev; hn.next = current; return head; }
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) { ListNode result = new ListNode(0); ListNode current = result; while (true) { int sum = current.val; if (l1 != null) { sum += l1.val; l1 = l1.next; } if (l2 != null) { sum += l2.val; l2 = l2.next; } current.val = sum % 10; sum = sum / 10; if (l1 != null || l2 != null || sum != 0) { current.next = new ListNode(sum); current = current.next; } else break; } return result; }
public ListNode SwapPairs(ListNode head) { if (head == null || head.next == null) return head; ListNode first = head; ListNode second = head.next; head = second; ListNode prev = null; while (first != null && second != null) { first.next = second.next; second.next = first; if (prev != null) { prev.next = second; } prev = first; first = first.next; if (first != null) second = first.next; } return head; }
public void OJ083_RemoveDuplicatesFromSortedListTest3() { ListNode ln = new ListNode(1); ln.Next(1).Next(1); ListNode result = new OJ083_RemoveDuplicatesFromSortedList().DeleteDuplicates(ln); Assert.AreEqual(1, ln.val); Assert.AreEqual(null, ln.next); }
public void OJ024_SwapNodesInPairsTest2() { ListNode l1 = new ListNode(1); l1.next = new ListNode(2); ListNode result = new OJ024_SwapNodesInPairs().SwapPairs(l1); Assert.AreEqual(2, result.val); Assert.AreEqual(1, result.next.val); }
public void OJ082_RemoveDuplicatesFromSortedListIITest2() { ListNode ln = new ListNode(1); ln.Next(1).Next(1).Next(2).Next(3); ListNode result = new OJ082_RemoveDuplicatesFromSortedListII().DeleteDuplicates(ln); Assert.AreEqual(2, result.val); Assert.AreEqual(3, result.next.val); Assert.AreEqual(null, result.next.next); }
public void OJ109_ConvertSortedListToBinarySearchTreeTest1() { ListNode n = new ListNode(1); n.Next(2).Next(3).Next(4).Next(5).Next(6); TreeNode result = new OJ109_ConvertSortedListToBinarySearchTree().SortedListToBST(n); Assert.AreEqual(3, result.val); Assert.AreEqual(1, result.left.val); Assert.AreEqual(2, result.left.right.val); Assert.AreEqual(5, result.right.val); Assert.AreEqual(4, result.right.left.val); Assert.AreEqual(6, result.right.right.val); }
public void OJ086_PartitionListTest1() { ListNode ln = new ListNode(1); ln.Next(4).Next(3).Next(2).Next(5).Next(2); ListNode result = new OJ086_PartitionList().Partition(ln, 3); Assert.AreEqual(1, result.val); Assert.AreEqual(2, result.next.val); Assert.AreEqual(2, result.next.next.val); Assert.AreEqual(4, result.next.next.next.val); Assert.AreEqual(3, result.next.next.next.next.val); Assert.AreEqual(5, result.next.next.next.next.next.val); Assert.AreEqual(null, result.next.next.next.next.next.next); }
public ListNode ReverseList(ListNode head) { ListNode prev = null; ListNode current = head; ListNode next = null; while (current != null) { next = current.next; current.next = prev; prev = current; current = next; } return prev; }
public void OJ025_ReverseNodesInKGroup2() { ListNode l1 = new ListNode(1); l1.next = new ListNode(2); l1.next.next = new ListNode(3); l1.next.next.next = new ListNode(4); l1.next.next.next.next = new ListNode(5); ListNode result = new OJ025_ReverseNodesInKGroup().ReverseKGroup(l1, 3); Assert.AreEqual(3, result.val); Assert.AreEqual(2, result.next.val); Assert.AreEqual(1, result.next.next.val); Assert.AreEqual(4, result.next.next.next.val); Assert.AreEqual(5, result.next.next.next.next.val); Assert.AreEqual(null, result.next.next.next.next.next); }
public void OJ206_ReverseLinkedListTest1() { ListNode l1 = new ListNode(1); l1.next = new ListNode(2); l1.next.next = new ListNode(3); l1.next.next.next = new ListNode(4); l1.next.next.next.next = new ListNode(5); ListNode result = new OJ206_ReverseLinkedList().ReverseList(l1); Assert.AreEqual(5, result.val); Assert.AreEqual(4, result.next.val); Assert.AreEqual(3, result.next.next.val); Assert.AreEqual(2, result.next.next.next.val); Assert.AreEqual(1, result.next.next.next.next.val); Assert.AreEqual(null, result.next.next.next.next.next); }
public void OJ024_SwapNodesInPairsTest1() { ListNode l1 = new ListNode(1); l1.next = new ListNode(2); l1.next.next = new ListNode(3); l1.next.next.next = new ListNode(4); l1.next.next.next.next = new ListNode(5); ListNode result = new OJ024_SwapNodesInPairs().SwapPairs(l1); Assert.AreEqual(2, result.val); Assert.AreEqual(1, result.next.val); Assert.AreEqual(4, result.next.next.val); Assert.AreEqual(3, result.next.next.next.val); Assert.AreEqual(5, result.next.next.next.next.val); Assert.AreEqual(null, result.next.next.next.next.next); }
public void OJ002_AddTwoNumbersTest2() { ListNode l1 = new ListNode(1); ListNode l2 = new ListNode(9); l2.next = new ListNode(9); ListNode l3 = new ListNode(0); l3.next = new ListNode(0); l3.next.next = new ListNode(1); ListNode result = new OJ002_AddTwoNumbers().AddTwoNumbers(l1, l2); Assert.AreEqual(l3.val, result.val); Assert.AreEqual(l3.next.val, result.next.val); Assert.AreEqual(l3.next.next.val, result.next.next.val); Assert.IsNull(result.next.next.next); }
private TreeNode generateBST(ListNode begin, ListNode end) { if (begin == end) return null; ListNode currentNode = begin; ListNode currentNodeHalf = begin; int i = 0; while (currentNode.next != end) { if (++i % 2 == 0) currentNodeHalf = currentNodeHalf.next; currentNode = currentNode.next; } TreeNode node = new TreeNode(currentNodeHalf.val); node.left = generateBST(begin, currentNodeHalf); node.right = generateBST(currentNodeHalf.next, end); return node; }
public void OJ002_AddTwoNumbersTest1() { ListNode l1 = new ListNode(2); l1.next = new ListNode(4); l1.next.next = new ListNode(3); ListNode l2 = new ListNode(5); l2.next = new ListNode(6); l2.next.next = new ListNode(4); ListNode l3 = new ListNode(7); l3.next = new ListNode(0); l3.next.next = new ListNode(8); ListNode result = new OJ002_AddTwoNumbers().AddTwoNumbers(l1, l2); Assert.AreEqual(l3.val, result.val); Assert.AreEqual(l3.next.val, result.next.val); Assert.AreEqual(l3.next.next.val, result.next.next.val); Assert.IsNull(result.next.next.next); }
public ListNode DeleteDuplicates(ListNode head) { if (head == null) return null; ListNode prev = head; ListNode current = head.next; while (current != null) { if (current.val == prev.val) { prev.next = current.next; } else { prev = current; } current = current.next; } return head; }
public void OJ021_MergeTwoSortedLists1() { ListNode l1 = new ListNode(1); l1.next = new ListNode(3); l1.next.next = new ListNode(12); l1.next.next.next = new ListNode(14); l1.next.next.next.next = new ListNode(15); ListNode l2 = new ListNode(2); l2.next = new ListNode(8); l2.next.next = new ListNode(12); ListNode result = new OJ021_MergeTwoSortedLists().MergeTwoLists(l1, l2); Assert.AreEqual(1, result.val); Assert.AreEqual(2, result.next.val); Assert.AreEqual(3, result.next.next.val); Assert.AreEqual(8, result.next.next.next.val); Assert.AreEqual(12, result.next.next.next.next.val); Assert.AreEqual(12, result.next.next.next.next.next.val); Assert.AreEqual(14, result.next.next.next.next.next.next.val); Assert.AreEqual(15, result.next.next.next.next.next.next.next.val); Assert.AreEqual(null, result.next.next.next.next.next.next.next.next); }
public ListNode RemoveNthFromEnd(ListNode head, int n) { if (head == null) return null; ListNode p1 = head; ListNode p2 = head; int i = n; while (i-- > 0) p1 = p1.next; if (p1 == null) return p2.next; while (p1.next != null) { p1 = p1.next; p2 = p2.next; } p2.next = p2.next.next; return head; }
public ListNode MergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null && l2 == null) return null; ListNode lResult = new ListNode(0); ListNode l = lResult; while (true) { if (l1 == null) { l.next = l2; return lResult.next; } else if (l2 == null) { l.next = l1; return lResult.next; } else { if (l1.val < l2.val) { l.next = l1; l1 = l1.next; } else { l.next = l2; l2 = l2.next; } l = l.next; } } }
public TreeNode SortedListToBST(ListNode head) { if (head == null) return null; return this.generateBST(head, null); }
public void OJ019_RemoveNthNodeFromEndOfListTest2() { ListNode l1 = new ListNode(1); ListNode result = new OJ019_RemoveNthNodeFromEndOfList().RemoveNthFromEnd(l1, 1); Assert.AreEqual(null, result); }
public static ListNode Next(this ListNode prev, int x) { ListNode node = new ListNode(x); prev.next = node; return node; }