LeetCode-Partition List-分割链表-链表操作
https://oj.leetcode.com/problems/partition-list/
首先找到第一个大于x的节点q,并记录前继lq。然后从q->next遍历其,将后面小于x的节点逐个插入lq与q之间,并将lq更新为新插入节点。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * 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; } };