小白算法积累——单链表23#带头结点单链表+删除绝对值相同的结点

题目:用单链表保存m个整数,结点的结构为【data】【link】,且**|data|<=n(n为正整数)。现要求设计一个时间复杂度尽可能高效**的算法,对于链表中data的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。
例如,若给定的单链表head如下:
在这里插入图片描述

关键字:带头结点单链表+删除绝对值相同的结点

思路
关注:
要求时间高效,所以想到用空间换时间,建立辅助数组来存放符合条件的新链表

(* ̄(oo) ̄):不是存放新链表!而是记录旧链表中已出现的数值,方法是:利用位序来代表某个元素的绝对值和0/1来代表是否存在。从而只需对原表进行一趟扫描。

因为|data|<=n,故辅助数组q的大小为n+1,各元素的初值均为0。
依次扫描链表中的各结点,同时检查q|data|的值,若为0则保留该结点,并令q|data|=1,否则将该结点从链表中删除

typedef struct node{
   
   int data;
   struct node *next;
   }LNode;

voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值