数据结构 c语言 谢谢大佬帮忙解答 谢谢。。。。。。。

【问题描述】已知线性表中的元素以值递增有序排列,并以单链表做存储结构。请写一算法,删除链表中数据域内容相同的多余结点。

【输入形式】
第1行输入数据个数
第2行输入结点数据,且数据序列递增有序
【输出形式】
输出没有重复的结点,输出以一个空格分隔

【样例输入】

    5

    1 3 3 3 5

【样例输出】

        1 3 5

图片说明
图片说明

https://blog.csdn.net/cckevincyh/article/details/45750133

已经知道这是一个链表了,而且是个单项链表,那么只好遍历了,就从第一个节点开始简称A节点,获取第一个值,再遍历下一个节点B,判断值是否相等,若相等,删除此节点,A节点则指向C节点,继续比较,直到指向NULL。 但根据题目,是一个单项递增的链表,也就是说,当你判断是否相等,如果大于你所在的节点,那么必然后面就没有了,所以非常好做。

void DEL(ListNode list)
{
ListNode * Pnow = &list;
ListNode * Pnext = list.next;
ListNode * Temp = NULL;
while(Pnow->next != NULL) // Pnow 指向最后一个节点结束
{
if(Pnow->data == Pnext->data) // 判断 Pnow 与Pnext是否相等,相等则删除
{
//删除相等节点
Temp = Pnext->next; //存储此相同值空间的节点地址
Pnext = Temp->next;//Pnext指向后一个节点
free(Temp);//释放相同值的节点空间,避免内存泄漏
}
else // Pnow 节点的值 与Pnext的值不相等,这个链表各节点的值又是递增,Pnow节点目前的值只剩下这一个节点。那么就去找下一个值
{
Pnow = Pnext; //Pnow 指向 Pnext,表示此前的节点的值已经查找结束,现在准备找下一个值是否存在相同
Pnext = Pnext->next;
}
}
}


写代码时你需要考虑到,如何去遍历,找到了后我该怎么操作,如果当Pnext->next = NULL ,已经最后一个节点了,我写的代码运行到这里是否会出现问题。

写代码的过程是个需要严格思考的过程,确保你的代码不会出现问题。