栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构】C语言算法练习题——通过 “ 创建俩个链表与尾插操作 ” 去解决

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构】C语言算法练习题——通过 “ 创建俩个链表与尾插操作 ” 去解决

题目链接:

链表分割_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

解题思路:

1. 要注意其与 x 的值进行比较后的这些数字的相对顺序不能改变,所以不能用 “ 逐步头插 ” 去解决

2. 思路:

新建俩个带哨兵位的链表,比 x 值大的数字通过 “ 尾插 ” 操作放在第一个链表中,比 x 值小的数字通过 “ 尾插 ” 操作放在第二个链表中

最后把这俩个链表连接起来,然后分别把头结点释放

尾插操作不会改变其数字间的相对顺序

3. 注意:

如果尾插到最后一个结点被放在其中一个链表中,而这个结点中的指针域没有被置为 NULL 那么此

时会形成环结构,造成使用用例出错。如下图:

参考代码:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x)
    {
        struct ListNode *bighead,*bigtail,*smallhead,*smalltail;
        smallhead = smalltail = (struct ListNode*)malloc(sizeof(struct ListNode));
        bighead = bigtail = (struct ListNode*)malloc(sizeof(struct ListNode));
        
        //bigtail = smalltail = NULL;
        //对哨兵位里的指针域进行初始化
        bigtail->next = NULL;
        smalltail->next = NULL;
        
        struct ListNode *cur = pHead;
        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;
        struct ListNode *list = smallhead->next;
        free(smallhead);
        free(bighead);
        return list;
    }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号