赞
踩
题目链接:链表分割_牛客题霸_牛客网
本题目在牛客网难度为较难,但是在整理思路画图后,题目难度并不大,下面说说我的思路
假设我们这里有一个链表为:2,3,5,1,7,2,然后找比4小的数字放在前面,比4大的数字放在后面,并且不改变原来的顺序,所以得出结果为:2,3,1,2,5,7
上来我们的链表应该是这样:
然后我们定义带哨兵卫的2个节点(用来保存小于4的节点和大于4的节点)
最后把2个链表连接起来(记住bigTail要置空并且smallTail->next指向为bigHead的下一个)
代码如下:
- class Partition {
- public:
- ListNode* partition(ListNode* pHead, int x) {
- struct ListNode* cur=pHead;
- //保存小于x的值
- struct ListNode* smallHead=(struct ListNode*)malloc(sizeof(struct ListNode));
- smallHead->next=NULL;
- struct ListNode* smallTail=smallHead;
- //保存大于x的值
- struct ListNode* bigHead=(struct ListNode*)malloc(sizeof(struct ListNode));
- bigHead->next=NULL;
- struct ListNode* bigTail=bigHead;
- while(cur)
- {
- if(cur->val<x)
- {
- smallTail->next=cur;
- smallTail=smallTail->next;
- }
- else
- {
- bigTail->next=cur;
- bigTail=bigTail->next;
- }
- cur=cur->next;
- }
- //这里置空不能忘记,一开始我就没想到
- bigTail->next=NULL;
- smallTail->next=bigHead->next;
- free(bigHead);
- struct ListNode* copysmallHead=smallHead->next;
- free(smallHead);
- return copysmallHead;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。