欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 链表分割(C语言)

链表分割(C语言)

2025/2/5 15:55:26 来源:https://blog.csdn.net/m0_63703622/article/details/141638197  浏览:    关键词:链表分割(C语言)

链表分割_牛客题霸_牛客网

1 题目描述

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

如上链表,x等于4,则需要将小于4的结点放到左边,且不改变其本身的相对顺序,即变成3>>2>>1。将大于4的放到右边,不改变相对顺序,即5>>6>>7。

所以最后得到的新链表为3>>2>>1>>5>>6>>7。

2 解题思路

通过给出的分割点,将链表分割为左右两个链表,即大于4的放一边,小于4的放一边,等于4的结点随便放哪一边都行。最后再把前后两个链表再串起来。

cur为遍历原链表指针,用两个新的头结点去尾插合法满足条件的结点。

最后将两个链表串起来。

3 完整代码 

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {ListNode *cur=pHead;ListNode *list1,*list1tail;ListNode *list2,*list2tail;list1=list1tail=(ListNode*)malloc(sizeof(ListNode));list2=list2tail=(ListNode*)malloc(sizeof(ListNode));list1->next=list1tail->next=NULL;list2->next=list2tail->next=NULL;while(cur){if(cur->val<x){list1tail->next=cur;list1tail=cur;}else {{list2tail->next=cur;list2tail=cur;}}cur=cur->next;}list1tail->next=list2->next;free(list2);list2tail->next=NULL;ListNode *head=list1->next;free(list1);return head;}
};

版权声明:

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

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