1. 程式人生 > >LeetCode:分割連結串列【86】

LeetCode:分割連結串列【86】

LeetCode:分割連結串列【86】

題目描述

給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

示例:

輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5

題目分析

  這道題有總體思路是從頭到尾掃描一次連結串列,將那些小於的節點放在一條連結串列上,大的放到一條連結串列上,最後兩條一拼接即可。

  由於題目給的條件寬泛,我們可以直接建立新的節點,也可以使用斷鏈法來讓節點重新指向。

Java題解

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
  public  ListNode partition(ListNode head, int x) {
        ListNode less =new ListNode(0);
        ListNode over =new ListNode(0);

        ListNode ptr = head;
        ListNode ptrLess = less;
        ListNode ptrOver = over;
      
        while(ptr!=null)
        {
            if(ptr.val<x) {
                ptrLess.next = new ListNode(ptr.val);
                ptrLess=ptrLess.next;
            }else{
                ptrOver.next=new ListNode(ptr.val);
                ptrOver=ptrOver.next;
            }
            ptr=ptr.next;
        }
        ptrLess.next=over.next;
        return less.next;
    }
}