题目考查的知识点

  • 链表断链与重组

题目解答方法的文字解析

  1. 遍历一遍链表,将链表分组,小于x为一组,记为A。其余的为另一组,记为B。
  2. 将B组拼接到A组的后面,B组最后一个节点的next置空。

本题解析所用的编程语言

  • c++

完整且正确的编程代码

class Solution {
public:
    ListNode* cow_partition(ListNode* head, int x) {
        ListNode small = ListNode(-1), large = ListNode(-1);
        ListNode*ps = &small, *pl = &large;
        ListNode*phead = head;
		// 将链表分组,小于x为一组,记为A。其余的为另一组,记为B。
        while(phead){
            if(phead->val<x){
                ps->next = phead;
                ps = ps->next;
            }else{
                pl->next = phead;
                pl = pl->next;
            }
            phead = phead->next;
        }
	  	// 将B组拼接到A组的后面,B组最后一个节点的next置空
        ps->next = large.next;
        pl->next = nullptr;

        return small.next;
    }
};