华为OD机试之单向链表中间节点(Java源码)_华为od机试 - 单向链表中间节点(2)

最后

面试题文档来啦,内容很多,485页!

由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

1111道Java工程师必问面试题

MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:

Elasticsearch 24 题 +Memcached + Redis 40题:

Spring 26 题+ 微服务 27题+ Linux 45题:

Java面试题合集:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

源码和解析
解析:

  1. 这种题目相对来说较好理解,可以简单理解为将节点按首尾相接的形式排序,首先第一行指定了节点开始地址。后续每行输入节点开始地址,值和结束地址。
  2. 输入时,可以使用循环来接收每个节点的信息。并装入一个ArrayList之中。当接收的节点开始地址等于第一行的开始地址时,证明该节点就是链表的第一个节点。
  3. 编写一个方法,用于取出未排序ArrayList中的目标节点。也即是有序链表的下一个节点。
  4. 这里需要注意的是,取出节点后就将目标节点从原始列表中移出,这样可以减少下一次查找的时间。如果在列表中无法找到目标节点,那么其他节点就不需要管了。我们只需要以开始地址为开头的那个节点形成链表的中间值。其他不在链表之中的就过滤掉即可。

示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class T24 {
	static class Point{
		String start;//开始地址
		int value;//值
		String next; //下一个节点地址
		@Override
		public String toString() {
			return "Point [start=" + start + ", value=" + value + ", next="
					+ next + "]";
		}
	}
	public static void main(String[] args) {
		System.out.println("请输入:");
		Scanner scanner=new Scanner(System.in);
		String input=scanner.nextLine();
		Point startPoint=new Point();
		int number=Integer.parseInt(input.split(" ")[1]);
		startPoint.start=input.split(" ")[0];
		List<Point> rawPoints=new ArrayList<T24.Point>();
		//排序后的List
		List<Point> orderList=new ArrayList<>();
		for(int i=0;i<number;i++){
			input=scanner.nextLine();
			Point point=new Point();
			point.start=input.split(" ")[0];
			point.value=Integer.parseInt(input.split(" ")[1]);
			point.next=input.split(" ")[2];
			if(point.start.equals(startPoint.start)){
				startPoint=point;
				orderList.add(point);
			}else{
				rawPoints.add(point);
			}
		}
		Point point=getNextPoint(rawPoints,startPoint.next);
		while(point!=null){
			orderList.add(point);
			rawPoints.remove(point);
			point=getNextPoint(rawPoints,point.next);
		}
		System.out.println(orderList);
		Point middlePoint=null;
		int middle=orderList.size()/2;//下标
		middlePoint=orderList.get(middle);
		System.out.println(middlePoint.value);
		// 长度为5 下标0 1 2 3 4 中间为2===5/2=2 长度为6 下标 0 1 2 3 4 5 中间为3 6/2=3 
	}
	//在List中查找以某个为开始索引的节点
	static Point getNextPoint(List<Point> points,String nextAddress){
		Point point=null;
		if(nextAddress.equals("-1")){
			return point;
		}
		for(int i=0;i<points.size();i++){
			if(points.get(i).start.equals(nextAddress)){
				point=points.get(i);
				break;
			}
		}
		return point;
	}
}


### 最后

俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

另外,给大家安排了一波学习面试资料:

![image](https://img-blog.csdnimg.cn/img_convert/1f5f7a635ce013f8d85974b75d8a4fbd.webp?x-oss-process=image/format,png)

![image](https://img-blog.csdnimg.cn/img_convert/27bef9ee714dabd37ec31dddb45284f7.webp?x-oss-process=image/format,png)

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

s/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值