数据结构OJ题链表分割
目录
1. 题目描述
2. 思路分析
整体思路:创建两个链表,分别存放小于x的结点和大于等于x的结点,分别进行尾插。
这道题目使用哨兵位会更简单,原因如下(能避开很多为空的情况):
(1)使用哨兵位就不需要考虑两个链表尾插时为空的情况。
(2)两个链表链接时也不需要考虑是否为空的情况。
(3)哪怕有一个链表为空,也有哨兵位的头结点,正常链接即可。
我们用结构体指针lhead和ltail分别表示值小于x的那一条链表,用结构体指针ghead和gtail表示值大于等于x的那一条链表。
用malloc()函数分别申请两个结点,也就是两个链表的哨兵位,让lhead和ltail一开始指向其中一个,ghead和gtail一开始指向另一个。
再创建一个结构体指针cur用来遍历原链表,我们采用了while循环,当cur不为空时遍历结点。
当结点的值小于x时,我们将这个结点尾插到第一个链表(ltail->next=cur)。再让ltai往后走一步(ltai=ltail->next)。
当结点的值大于等于x时,我们将结点尾插到第二个链表(gtail->next=cur)。再让gtail往后走一 一步(gtail=gtail->next)。
尾插一个结点后,让cur往后走一步(cur=cur->next)。当cur为空时停止循环。
然后将两个链表链接起来。(ltail->next=ghead->next)。
有一点需要非常注意!!!
将gtail->next=NULL
否则可能会出现环。
因为现在lhead指向的是哨兵位,所以我们要将lhead往后走一步(lhead=lhead->next)。
因为怕找不到lhead的下一个位置,所以我们引入一个结构体指针head保存lhead的下一个位置。(struct ListNode *head=lhead->next)。
然后为了防止内存泄漏,我们要用free()释放掉两个哨兵位(即free(lhed)和free(ghead))。
最后返回head即可。
3. 代码实现
-
/*
-
struct ListNode {
-
int val;
-
struct ListNode *next;
-
ListNode(int x) : val(x), next(NULL) {}
-
};*/
-
class Partition {
-
public:
-
ListNode* partition(ListNode* pHead, int x) {
-
struct ListNode *lhead,*ltail,*ghead,*gtail;
-
lhead=ltail=(struct ListNode*)malloc(sizeof(struct ListNode));
-
ghead=gtail=(struct ListNode*)malloc(sizeof(struct ListNode));
-
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;
-
}
-
ltail->next=ghead->next;
-
//不空,可能导致出现环
-
gtail->next=NULL;
-
struct ListNode *head=lhead->next;
-
free(lhead);
-
free(ghead);
-
return head;
-
}
-
};
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibakee
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22