PTA 3 删除单链表的重复结点

本题要求实现一个函数, pur_LinkList(LinkList L)函数是删除带头结点单链表的重复结点。

函数接口定义:

void pur_LinkList(LinkList L);

其中 L 是用户传入的参数。 L 是带头结点单链表的​头指针。

裁判测试程序样例:

输入样例:

在这里给出一组输入。例如:

1 2 3 3 3 4 5 6 7 8 -1

输出样例:

在这里给出相应的输出。例如:

     1     2     3     4     5     6     7     8

 思路:

  1. 首先,定义两个指针p和pn,分别指向链表的头节点和头节点的下一个节点。
  2. 循环条件是p不为NULL
  3. 在循环中,将pn重新指向p,进行新一轮的比较
  4. 第二个while循环,循环条件是pn的下一个节点不为NULL,pn->next==NULL即找到最后一个节点
  5. 判断p->data和pn->next->data是否相等,如果相等,则将pn的下一个节点删除,将pn->next指向pn->next->next
  6. 如果p->data和pn->next->data不相等,则将pn指向pn的下一个节点,即pn向后移动一位。
  7. 内层循环结束后,将p指向下一个节点,即p向后移动一位。
  8. 外层循环结束后,整个链表的去重操作完成。

总体来说,这段代码使用了两层循环,外层循环遍历链表的每一个节点,内层循环用于比较外层节点与其后面的节点是否相等,并进行去重操作。

void  pur_LinkList(LinkList L)
{
    LinkList p=L->next;// 找到头节点
    LinkList pn=L;
    while(p!=NULL)
    {
        pn=p;// 让内层的指针pn指向外层指针p
        while(pn->next!=NULL)// 内层指针pn->next==NULL,表示最后一个元素
        {
            if(p->data == pn->next->data)// 外层第一个和内层每一个比较去重
                pn->next=pn->next->next;
            else
                pn=pn->next;
        }
        p=p->next;// 外层向后移
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值