算法3:链表分割

题目链接

解析:

完整代码:

cpp 复制代码
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
#include <cstddef>
#include <unistd.h>
class Partition {
  public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        ListNode* lessHead,*lessTail;
        lessHead = lessTail =(ListNode*)malloc(sizeof(ListNode));
        ListNode* greaterHead,*greaterTail;
        greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));
        ListNode* pcur = pHead;
        while(pcur)
        {
            if(pcur->val < x)
            {
                //插入小链表
                lessTail->next = pcur;
                lessTail = lessTail->next;
            }
            else 
            {
                greaterTail->next = pcur;
                greaterTail = greaterTail->next;
                //插入大链表
            }
            pcur = pcur->next;
        }
        //跳出循环,链表遍历完,将大小链表相连
        lessTail->next = greaterHead->next;
        //将大链表的尾节点置为空,防止死循环
        greaterTail->next = NULL;
        //先保存要用的结点,再释放申请的两个哨兵位,并置为空,防止野指针
        ListNode* retHead = lessHead ->next;
        free(lessHead);
        free(greaterHead);
        lessHead = greaterHead = NULL;
        return retHead;

    }
};

有许多小细节需要注意:

  1. 申请结点的释放并置为空指针,防止野指针!!
  2. 多用几组测试案例去测试,这样考虑的更加全面,代码也更加完善!!
  3. 画图很关键!!
相关推荐
GrowingIO技术社区5 小时前
CDP、行为分析、归因与营销自动化有什么区别?
数据结构·数据挖掘·数据分析
GrowingIO技术社区5 小时前
实时标签怎样验收?从数据更新到分群可用
数据结构·数据挖掘·数据分析
青梅味猪大肠5 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
其实防守也摸鱼20 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
Nuanyt21 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
w_zero_one1 天前
递归算法(一)
java·开发语言·算法
风影同志783241 天前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG1 天前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
地平线开发者1 天前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法