public ListNode DeleteDuplicates(ListNode head) { ListNode dumHead = new ListNode(0), slow, fast; dumHead.next = head; slow = dumHead; fast = head; int fastStep = 0; while (fast != null && fast.next != null) { if (fast.next.val != fast.val) { if (fastStep > 0) { slow.next = fast.next; fast = fast.next; fastStep = 0; } else { fast = fast.next; slow = slow.next; } } else { fast = fast.next; fastStep++; } } if (slow.next != fast) { slow.next = null; } return(dumHead.next); }
public ListNode ReverseBetween(ListNode head, int m, int n) { if (head == null) { return(null); } ListNode pre = null, cur = head, dumHead = new ListNode(0), newHead = dumHead, newTail = null; dumHead.next = head; int counter = 1; while (cur != null && counter <= n) { if (counter >= m) { newTail = counter == m ? cur : newTail; ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } else { cur = cur.next; newHead = newHead.next; } counter++; } newHead.next = pre; newTail.next = cur; return(dumHead.next); }
public ListNode Partition(ListNode head, int x) { if (head == null) { return(null); } ListNode current = head, leftHead = null, leftTail = null, rightHead = null, rightTail = null; while (current != null) { ListNode tmp = new ListNode(current.val); if (current.val < x) { if (leftHead == null) { leftHead = tmp; leftTail = tmp; } else { leftTail.next = tmp; leftTail = leftTail.next; } } else { if (rightHead == null) { rightHead = tmp; rightTail = tmp; } else { rightTail.next = tmp; rightTail = rightTail.next; } } current = current.next; } if (leftTail != null) { leftTail.next = rightHead; return(leftHead); } return(rightHead); }