给定一个特定的值,和一个链表,使这个链表中小于特定值的节点在左边,大于等于特定值的节点在右边。这道题我们可以先分别构造小于特定值的链表,和一个大于等于特定值的链表,然后,将两个链表连接成为一个链表,就达到了题目要求的链表结构。
下面是C语言实现的代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* partition(struct ListNode* head, int x){
struct ListNode left = {
.val = 0,
.next = NULL
}, right = {
.val = 0,
.next = NULL
};
struct ListNode *leftP = &left, *rightP = &right;
while (head) {
if (head->val < x) {
leftP->next = head;
leftP = head;
} else {
rightP->next = head;
rightP = head;
}
head = head->next;
}
leftP->next = right.next;
rightP->next = NULL;
return left.next;
}