LeetCode:分割連結串列【86】
阿新 • • 發佈:2018-11-08
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; } }