🖊作者 : Djx_hmbb
📘专栏 : 数据结构
😆今日分享 : 不要把人生浪费在无关紧要的选择中
文章目录
✔题目链接
✔题目
✔解题思路:
创建两个链表,分别存放小于x的节点和大于等于x的节点,分别进行尾插
✔代码详情:
struct ListNode* partition(struct ListNode* pHead, int x) {
struct ListNode* lessHead, * greaterHead, * cur, * lessCur, * greaterCur;
cur = pHead;
lessHead = lessCur = (struct ListNode*)malloc(sizeof(struct ListNode));
greaterHead = greaterCur = (struct ListNode*)malloc(sizeof(struct ListNode));
lessCur->next = NULL;
greaterCur->next = NULL;
//判断cur是否为空
while (cur) {
//判断cur的值是否比x小,移值
if (cur->val < x) {
lessCur->next = cur;
lessCur = lessCur->next;
}
else {
greaterCur->next = cur;
greaterCur = greaterCur->next;
}
cur = cur->next;//cur后移一位
}
lessCur->next = NULL;
greaterCur->next = NULL;
//连接
//满足一个情况就执行
if (lessHead->next || greaterHead->next) {
//不为空时
lessCur->next = greaterHead->next;
return lessHead->next;
}
else {
return greaterHead->next;
}
}
✔总结:
- 带头结点尾插法 : 更利于解决这个题目
- 当cur找完之后,记得next置空
- 最后还要考虑 lessHead->next 和 greaterHead->next 为空的情况
感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!