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

c语言--力扣简单题目(删除排序链表中的重复元素)讲解

题目如下:

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:

输入:head = [1,1,2] 输出:[1,2]

示例 2:

输入:head = [1,1,2,3,3] 输出:[1,2,3]

提示:

链表中节点数目在范围 [0, 300] 内

-100 <= Node.val <= 100

题目数据保证链表已经按升序 排列

结构体定义:

typedef struct Node {
char val;
struct Node* next;
}Node;
typedef Node* List;

文章目录

  • 第一部分
  • 第二部分

第一部分

List head, tail;
Node* p, * p1;//p1用来删除节点
p = (Node*)malloc(sizeof(struct Node));
p1 = (Node*)malloc(sizeof(struct Node));
int ch, val;
head = p;
tail = p;
head->next = NULL;
printf("请输入链表的内容");
while ((ch = getchar()) != '\n') {if (ch == ' ') {continue;}p = (Node*)malloc(sizeof(struct Node));p->val = ch-48;tail->next = p;tail = p;tail->next = NULL;
}

第一部分进行输入。

第二部分

tail = head->next;//让tail指向存储数据的第一个节点
while (tail->next != NULL) {if (tail->next->val == tail->val) {p1 = tail->next;tail->next = p1->next;free(p1);}else {tail = tail->next;}
}
while (head->next != NULL) {head = head->next;printf("%d ", head->val);
}
return 0;

第二部分我们先让tail指针指向第一个节点,因为题目已经是按升序排序好,所以我们这里不需要进行排序,我们将当前的节点储存的值与下一个节点储存的值进行比较,如果相等,那么我们进行删除操作,如果不相等,那么我们让tail指针指向下一个节点。
当退出循环后我们再进行打印就可以了。


http://www.mrgr.cn/news/23841.html

相关文章:

  • windows软件应该安装在哪里
  • 园区竞争十分激烈,各类园区网站美出天际啦。
  • 经验笔记:Web 浏览器存储手段
  • 告别繁琐,IsMyHdOK硬盘测速,即刻享受科技便利
  • 内网安全:反弹shell
  • 力扣题/回溯/单词搜索
  • vue2项目如何设置同样的接口第一次请求有效,如果第二次请求同样的接口,则不去请求,因为第一次请求还没有返回数据
  • Java代码审计篇 | ofcms系统审计思路讲解 - 篇3 | 文件上传漏洞审计
  • 100个候选人,没一个能讲明白什么是自动化框架?
  • Guitar Pro 8.2.1 Build 32 永久中文破解解锁版
  • Unity1 Prefab
  • 容易出错的if语句
  • 【springsecurity】使用PasswordEncoder加密用户密码
  • Vue组件:插槽
  • 3、三维重建-NeuralRecon
  • 哪个牌子的超声波清洗器好?盘点几款清洗效果不错的超声波清洗机
  • 《在 Windows 系统中配置 Python 3.11 环境安装教程》
  • Java集合面试题
  • 【JS逆向学习】大学竞争力2021排行榜(md5加密)
  • CATH数据库数据下载