編程題--鏈表分割

 題目描述:

 編寫代碼,以給定值x爲基準將鏈表分割成兩部分,所有小於x的結點排在大於或等於x的結點之前

 給定一個鏈表的頭指針 ListNode* pHead,請返回重新排列後的鏈表的頭指針。

 注意:分割後保持原來的數據順序不變

解題思路:

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Partition {
    public ListNode partition(ListNode pHead, int x) {
        // write code here
        ListNode beforeStart = null;
        ListNode afterStart = null;
        ListNode beforeEnd = null;
        ListNode afterEnd = null;
        while (pHead != null){
            ListNode pHeadNext = pHead.next;
            pHead.next = null;
            if (pHead.val < x){
                if (beforeStart == null){
                    beforeStart = pHead;
                    beforeEnd = beforeStart;
                }else {
                    beforeEnd.next = pHead;
                    beforeEnd = beforeEnd.next;
                }
            }else {
                if (afterStart == null){
                    afterStart = pHead;
                    afterEnd = afterStart;
                }else {
                    afterEnd.next = pHead;
                    afterEnd = afterEnd.next;
                }
            }
            pHead = pHeadNext;
        }
        if (beforeStart == null){
            return afterStart;
        }
        beforeEnd.next = afterStart;//單鏈表拼接
        return beforeStart;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章