leetcode

来源:互联网 发布:如何申请淘宝小号涮单 编辑:程序博客网 时间:2024/06/06 09:40

Partition List

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,

Given 1->4->3->2->5->2 and x = 3,

return 1->2->2->4->3->5.

Solution1:

  public ListNode partition(ListNode head, int x) {    if (head == null || head.next == null) {      return head;    }    ListNode root = new ListNode(0);    root.next = head;    ListNode less = root;    ListNode greater = head;    ListNode temp;    while (greater != null && greater.val < x) {      greater = greater.next;      less = less.next;    }    if (greater == null) {      return root.next;    }    while (greater.next != null) {      if (greater.next.val < x) {        temp = less.next;        less.next = greater.next;        greater.next = greater.next.next;        less = less.next;        less.next = temp;      } else {        greater = greater.next;      }    }    return root.next;  }

Solution2:

  public ListNode partition(ListNode head, int x) {    ListNode less = new ListNode(0);    ListNode greater = new ListNode(0);    ListNode curr1 = less;    ListNode curr2 = greater;    while (head != null) {      if (head.val < x) {        curr1.next = head;        curr1 = curr1.next;      } else {        curr2.next = head;        curr2 = curr2.next;      }      head = head.next;    }    curr2.next = null;    curr1.next = greater.next;    return less.next;  }
0 0