83. 删除排序链表中的重复元素

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

示例 1:

输入: 1->1->2
输出: 1->2
示例 2:

输入: 1->1->2->3->3
输出: 1->2->3

 

我写的错误代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 
 
struct ListNode* deleteDuplicates(struct ListNode* head){
 
struct ListNode *p=(struct ListNode *)malloc(sizeof(struct ListNode));
head->next=p;
if(p->val==head->val)
{
    head->next=p->next;
    free(p);
    head=head->next;
 
}
else{
    head=head->next;
}
return head->next;
}

  报的错:

 

 内存无法打印,可能是存在野指针的问题

修改后正确的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 
 
struct ListNode* deleteDuplicates(struct ListNode* head){
if(!head)
  return NULL;
 
struct ListNode *p=head;
struct ListNode *temp=NULL;
while(p!=NULL&&p->next!=NULL)
{
if(p->val==p->next->val)
{
    temp=p->next;
    p->next=p->next->next;
    free(temp);
 
}
else{
    p=p->next;
}
}
return head;
}

主要问题分析:

头指针是表示当前链表信息的没有实际意义的节点,而首节点是链表中第一个含有实际意义的值

有一个问题就是什么时候需要声明节点,什么时候直接使用还是没搞清楚

 

 

 把上面直接使用节点变成下面这句话的时候,就会报错,说明*p节点是不需要重新申请就可以直接使用的

这个错误需要搞清楚:

我的理解是这样的,*p是新申请的指针变量,他指向的是链表的头结点,所以无需新分配地址空间。

如果以后看的链表东西多了,目前的结论被推翻了,那就回来再修改一下

posted @   进寸欢喜  阅读(135)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
点击右上角即可分享
微信分享提示