一.题目及剖析
https://leetcode.cn/problems/partition-list-lcci/description/
二.思路引入
就是将其分成大小两个链表,以x为分界线进行分堆,最后再将两链表合并
三.代码引入
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* partition(struct ListNode* head, int x){ if(head == NULL) return head; struct ListNode *lessHead, *lessTail, *greaterHead, *greaterTail, *pcur; lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode)); greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode)); pcur = head; while(pcur) { if(pcur->val < x) { lessTail->next = pcur; lessTail = lessTail->next; } else { greaterTail->next = pcur; greaterTail = greaterTail->next; } pcur = pcur->next; } greaterTail->next = NULL; lessTail->next = greaterHead->next; return lessHead->next; }