Java数据结构-线性表之单链表应用-重复节点的删除

整个问题的解题思路如下:

  1. 建立指针p,用于遍历链表;
  2. 建立指针q,q遍历p后面的结点,并与p数值比较;
  3. 如果q与p值相等,则删除q。如果q有后继节点,则将q前驱节点和q后继节点链接起来;否则直接开始下一轮遍历。

Java代码实现如下,建议将这段代码copy到之前的Java版本的LinkedList(FOLinkedList)中。

/**
 * @TODO 重复节点的删除
 * @param foll 需要删除重复节点的单链表
 * @return foll 删除重复节点后的单链表
 */
public static FOLinkedList removeRepeatElement(FOLinkedList foll){
    FOLinkedNode p = foll.header;
    if(foll.header==null){
        return foll;
    }
    while(p.next!=null){
        FOLinkedNode q = p.next;
        while(q.next!=null){
            if(q.next.getE().equals(p.getE())){
                q.addNext(q.next.next);
                foll.size--;
            }else{
                q = q.next;
            }
        }
        p=p.next;
    }
    return foll;
}

算法的时间性能为O(n的2次方)

版权声明:本文为博主原创文章,如需转载请注明出处并附上链接,谢谢。

转载于:https://my.oschina.net/panhainan/blog/483175

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值