单链表算法 - 链表分割

链表分割_牛客题霸_牛客网现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的。题目来自【牛客题霸】https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70思路:

代码:

cpp 复制代码
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        //创建两个非空链表:小链表和大链表
        ListNode* lesstHead,*lesstTail;
        lesstHead = lesstTail = (ListNode*)malloc(sizeof(ListNode));

        ListNode* greaterHead,*greaterTail;
        greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));
        //创建临时变量来遍历原数组
        ListNode* prev = pHead;
        while(prev)
        {
            //判断当前节点是否小于x
            if(prev->val < x)
            {
                //插入到小链表中
                lesstTail->next = prev;
                lesstTail = lesstTail->next;
            }
            else
            {
                //插入到大链表中
                greaterTail->next = prev;
                greaterTail = greaterTail->next;
            }
            prev = prev->next;
        }
        //退出循环原链表遍历完成
        //连接两个链表
        lesstTail->next = greaterHead->next;
        ListNode* ret = lesstHead->next;
        free(lesstHead);
        lesstHead = NULL;
        free(greaterHead);
        greaterHead = NULL;
        return ret;
    }
};

提交结果:

当我们提交代码之后代码有问题,那么代码到底哪里的逻辑不合适呢?我们画图看一下。

cpp 复制代码
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        //创建两个非空链表:小链表和大链表
        ListNode* lesstHead,*lesstTail;
        lesstHead = lesstTail = (ListNode*)malloc(sizeof(ListNode));

        ListNode* greaterHead,*greaterTail;
        greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));
        //创建临时变量来遍历原数组
        ListNode* prev = pHead;
        while(prev)
        {
            //判断当前节点是否小于x
            if(prev->val < x)
            {
                //插入到小链表中
                lesstTail->next = prev;
                lesstTail = lesstTail->next;
            }
            else
            {
                //插入到大链表中
                greaterTail->next = prev;
                greaterTail = greaterTail->next;
            }
            prev = prev->next;
        }
        //将大链表的尾节点的next指针置为NULL
        greaterTail->next = NULL;
        //连接两个链表
        lesstTail->next = greaterHead->next;
        ListNode* ret = lesstHead->next;
        free(lesstHead);
        lesstHead = NULL;
        free(greaterHead);
        greaterHead = NULL;
        return ret;
    }
};

提交结果:

相关推荐
wypdao几秒前
编程学习之路上的挫折:如何在Bug迷宫中找到出口
程序人生·算法·职场和发展·学习方法
轮到我狗叫了21 分钟前
牛客笔试训练
java·数据结构·算法
安大小万24 分钟前
二叉搜索树:数据结构之美
开发语言·算法
天下烛火空明26 分钟前
【代码随想录算法训练营第42期 第三十天 | LeetCode452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间】
java·算法·哈希算法
菜就多练_082826 分钟前
《机器学习》 贝叶斯分类器 原理、参数讲解及代码演示
人工智能·算法·机器学习·贝叶斯算法
新缸中之脑29 分钟前
Llama 4B剪枝蒸馏实战
算法·llama·剪枝
m0_4802277037 分钟前
计算机基础知识总结(八股文--计算机网络、操作系统、数据库、c++、数据结构与算法)
java·数据结构·数据库·c++·计算机网络·mysql·算法
诸葛悠闲1 小时前
数据结构(邓俊辉)学习笔记】串 04——KMP算法:查询表
数据结构·笔记·学习
卡戎-caryon2 小时前
【C++】13.特殊类的设计
java·开发语言·c++·算法
是小吕2 小时前
查找3(红黑树、B树)
数据结构