当前位置: 首页 > news >正文

【数据结构OJ题】链表分割

原题链接:https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

2. 思路分析

整体思路:创建两个链表,分别存放小于x的结点大于等于x的结点分别进行尾插

这道题目使用哨兵位会更简单,原因如下(能避开很多为空的情况):

(1)使用哨兵位就不需要考虑两个链表尾插时为空的情况。

(2)两个链表链接时也不需要考虑是否为空的情况。

(3)哪怕有一个链表为空,也有哨兵位的头结点,正常链接即可。

我们用结构体指针lheadltail分别表示值小于x的那一条链表,用结构体指针gheadgtail表示值大于等于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;}
};

http://www.lryc.cn/news/129371.html

相关文章:

  • 无感知发布
  • C++ 虚继承
  • git commit用法
  • 【LeetCode】543.二叉树的直径
  • TypeScript教程(五)条件语句,循环,函数
  • vue使用jsplumb 流程图
  • 【BASH】回顾与知识点梳理(二十八)
  • LangChain源码逐行解密之系统(二)
  • QT的设计器介绍
  • [LitCTF 2023]Ping
  • Spring Cloud面试突击班1
  • 线上售楼vr全景看房成为企业数字化营销工具
  • “深入探索JVM内部机制:解密Java虚拟机原理“
  • 最长 上升子序列
  • Nginx的介绍
  • [杂项]奥特曼系列影视列表大全
  • java代码日记--java 基础语法
  • Spring中的IOC与DI-细胞内物质与传递
  • 【探索Linux】—— 强大的命令行工具 P.5(yum工具、git 命令行提交代码)
  • jdbc 使用rewriteBatchedStatements=true后,报错
  • 第G1周:生成对抗网络(GAN)入门
  • Stable Diffusion基础:ControlNet之图片高仿效果
  • TCGA数据下载推荐:R语言easyTCGA包
  • JLSX 模版指令导出Excel
  • 【制作npm包3】了解 tsconfig.json 相关配置
  • 【0基础入门Python笔记】一、python 之基础语法、基础数据类型、复合数据类型及基本操作
  • 2023-08-18力扣每日一题
  • mac M1安装opencv方法及类型报错解决
  • Screen终端管理工具
  • 【python自动化办公】PysimpleGUI官网案例全部项目代码文件及运行截图