本篇内容介绍了“Java删除值相同的多余结点的算法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
这是一道算法题,写算法题最恨没有图解,懂的人不需要看你的文章,不懂的你再怎么讲解也没有几张图解来得简单易懂,下面来分析一下这道题。
我暂时还没有更好的解决方案,虽然有一个办法解决,但是时间复杂度有点高,先看看我的思路吧。
看图解:
p -> data == q -> next -> data
;若不相等,则让q指向下一个结点:
p = p->next
;若相等,则应该先保存下一个结点:
r = q -> next
,然后让q指针指向下一个结点的下一个结点:
q = r -> next
,并释放r指向的结点内存。这样就成功删除了一个与首元结点重复的结点,接下来以同样的方式继续比较,直到整个单链表都遍历完毕,此时单链表中已无与首元结点重复的结点;然后我们就要修改p指针的指向,让其指向首元结点的下一个结点,再让q指向其下一个结点,继续遍历,将单链表中与第二个结点重复的所有结点删除。以此类推,直至指针p也遍历完了整个单链表,则算法结束。
刚才我们已经删除了一个结点,那么接下来p应该指向下一个结点了:
q = q -> next
。
代码如下:
LinkList DeleteRepeat(LinkList l){
LinkList p,q,r;
p = l->next;
while(p != NULL){
q = p;
while(q->next != NULL){
if(p->data == q->next->data){
r = q->next;
q = r->next;
free(r);
}else{
q = q->next;
}
}
p = p->next;
}
return l;
}
“Java删除值相同的多余结点的算法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。