LeetCode-Partition List-分割链表-链表操作

https://oj.leetcode.com/problems/partition-list/

首先找到第一个大于x的节点q,并记录前继lq。然后从q->next遍历其,将后面小于x的节点逐个插入lq与q之间,并将lq更新为新插入节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *partition(ListNode *head, int x) {
        if (head==NULL) return NULL;
        ListNode *p=head,*lp=NULL;
        while(p){
            if (p->val>=x) break;
            lp=p;p=p->next;
        } 
        if (p==NULL) return head;
        ListNode *lq=lp,*q=p;
        lp=p;
        p=p->next;
        while(p){
            if (p->val<x){
                lp->next=p->next;
                p->next=q;
                if (lq) lq->next=p;
                else head=p;
                lq=p;
                p=lp->next;
            }
            else{
                lp=p;p=p->next;
            }
        }
        return head;
    }
};
View Code

 

posted @ 2014-10-12 23:09  zombies  阅读(133)  评论(0编辑  收藏  举报