您的位置:首页 > 科技 > 能源 > 在线设计的网站_好看的网页设计作品欣赏_营销型网站建设多少钱_图床外链生成工具

在线设计的网站_好看的网页设计作品欣赏_营销型网站建设多少钱_图床外链生成工具

2025/2/25 15:16:26 来源:https://blog.csdn.net/xnyxy2431366813/article/details/145525369  浏览:    关键词:在线设计的网站_好看的网页设计作品欣赏_营销型网站建设多少钱_图床外链生成工具
在线设计的网站_好看的网页设计作品欣赏_营销型网站建设多少钱_图床外链生成工具

题目

现有一链表的头指针struct ListNode* pHead,给一定值x,编写一段代码将所有小于x的节点排在其余节点之前,且不能改变原来数据顺序,返回重新排列后的链表的头指针

示例:
pHead [1,5,2,7,3,4], x=5
输出 [1,2,3,4,5,7]

struct ListNode {int val;struct ListNode* next;
};struct ListNode* partition(struct ListNode* pHead, int x) {}

分析

思路:
创建两个新链表,分别存储小于x的节点和大于等于x的节点。将两个新链表链接起来成为新链表,返回新链表。
流程:
注:(great->g; less->l)
创建两个哨兵位,用gGuard和lGuard指向。创建gTail和lTail指向大小链表尾。
创建cur指针遍历原链表,当cur->val<x时尾插到lTail->next;否则尾插到gTail->next。
最后pHead指针存储新链表头,链接大小链表(lTail->next = gGuard->next;),再将新链表结尾指向NULL(gTail->next = NULL;)。
释放哨兵位。
返回pHead。

代码

struct ListNode {int val;struct ListNode* next;
};struct ListNode* partition(struct ListNode* pHead, int x) {struct ListNode* gGuard, * gTail, * lGuard, * lTail;gGuard = gTail = (struct ListNode*)malloc(sizeof(struct ListNode));//创建哨兵位lGuard = lTail = (struct ListNode*)malloc(sizeof(struct ListNode));//创建哨兵位gTail->next = lTail->next = NULL;struct ListNode* cur = pHead;while (cur){if (cur->val < x){lTail->next = cur;lTail = lTail->next;}else{gTail->next = cur;gTail = gTail->next;}cur = cur->next;}gTail->next = NULL;lTail->next = gGuard->next;pHead = lGuard->next;free(gGuard);free(lGuard);return pHead;
}

本题若使用不带头单链表,会遇到很为NULL的情况,使用哨兵位可以避免这个问题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com