正值秋招,分享一道我在网上看到的算法题
2026/8/4 21:23:06 网站建设 项目流程

手撕问题是这样的:
有一个链表,节点的值都是数字,删除最少的节点使得链表中的数字都一样。

---------------------------------------------------------------------------------------------------------------------------------

思路分享:仔细一看,按照一般的思路就可以解出这道题,难度不大。

首先,先建立一个哈希表,然后键是遍历链表得到的数字,然后值是每个数字出现的次数。然后再遍历哈希表,得到最多次数的那个数字,然后再遍历链表,最后将不是该数字的数字都删掉。

(--备注:下面给出的代码都是我手写的,未经调试运行,大致看个思路即可,如果有哪个地方有点错误,恳请指出--)

代码片段:

import java.util.*;

/**

*结构体定义

*/

class ListNode{

int val;

ListNode next;

ListNode(int val){

this.val=val;

next=null;

}

}

public class sameList{

public static void main(String[] args){

ListNode head=new ListNode(1);//构造一个链表

ListNode p=head;

Scanner sc = new Scanner(System.in);

int len=sc.nextInt();

for(int i=0;i<len;i++){

ListNode q=new ListNode(0);

q.val=0;

p.next=q;

p=q;

}

DeleList deli = new DeleList();//创建对象

ListNode k = deli.deleList(head);//传入链表头节点

while(k!=null){

System.out.println(k.val);

k=k.next;

}

}

}

class DeleList{

public ListNode deleList(ListNode head){

ListNode p=head;

Map<Integer, Integer> map = new HashMap<>();

while(p!=null){

map.put(p.val, map.getOrDefault(p.val, 0)+1);

p=p.next;

}

int mark=0, max_num=0;

for(Map.Entry<Integer, Integer> entry : map.entrySet()){//遍历哈希表

Integer key = entry.getKey();

Integer value = entry.getValue();

if(max_num<value){

mark=key;

max_num=value;

}

}

ListNode yum=new ListNode(0);

yum.next=head;

ListNode k=yum;

while(k.next!=null){

if(k.next.val!=mark){

k.next=k.next.next;

}

else{

k=k.next;

}

}

return yum.next;

}

}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询