Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }