给你一个链表的头节点?head
?和一个特定值?x
?,请你对链表进行分隔,使得所有?小于?x
?的节点都出现在?大于或等于?x
?的节点之前。
你不需要?保留?每个分区中各节点的初始相对位置。
思路:
弄两个链表然后合到一块。
易错点:‘
结束时greaterTail是和cur(lessTail)连着的,构成了一个环,所以应置空。’
不置空会报错
代码:
struct ListNode* partition(struct ListNode* head, int x){
struct ListNode*lessHead,*lessTail,*greaterHead,*greaterTail;
lessHead=lessTail=(struct ListNode*)malloc(sizeof(struct ListNode));
lessTail->next=NULL;
greaterHead=greaterTail=(struct ListNode*)malloc(sizeof(struct ListNode));
greaterTail->next=NULL;
struct ListNode*cur=head;
while(cur){
if(cur->val<x){
lessTail->next=cur;
lessTail=cur;
}
else{
greaterTail->next=cur;
greaterTail=cur;
}
cur=cur->next;
}
lessTail->next=greaterHead->next;
//greaterTail->next=NULL;
struct ListNode*newHead=lessHead->next;
free(lessHead);
free(greaterHead);
return newHead;
}