题解 | #链表分割#
链表分割
https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class Partition { public: ListNode* partition(ListNode* pHead, int x) { // write code here /*思路:小于的跟着一个哨兵头,非小于的跟着另一个哨兵头,第一个哨兵头的结尾连着另外一个哨兵头的next,*/ ListNode* guard = (ListNode*)malloc(sizeof(ListNode));/*两个哨兵头,分别代表小于x和不小于x的哨兵头*/ ListNode* guard2 = (ListNode*)malloc(sizeof(ListNode)); guard->next = NULL; guard2->next = NULL; ListNode* guard_cur = guard;/*统计小于x的节点*/ ListNode* guard_cur2 = guard2;/*统计不小于x的节点*/ ListNode* cur = pHead;/*统计所有节点*/ while(cur) { if(cur->val < x) { guard_cur->next = cur; guard_cur = guard_cur->next; } else { guard_cur2->next = cur; guard_cur2 = guard_cur2->next; } cur = cur->next; } guard_cur->next = NULL; guard_cur2->next = NULL; guard_cur->next = guard2->next; pHead = guard->next; free(guard); free(guard2); return pHead; } };