题目描述
求单向链表中间的节点值,如果奇数个节点取中间,偶数个取偏右边的那个值。
输入描述
第一行 链表头节点地址 后续输入的节点数 𝑛
后续输入每行表示一个节点,格式 节点地址 节点值 下一个节点地址( -1 表示空指针)
输入保证链表不会出现环,并且可能存在一些节点不属于链表。
输出描述
单向链表中间的节点值
代码实现
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.lang.Integer;
// 定义链表
class Node {
int address;
int number;
int nextAddress;
Node next;
public Node(int address, int number, int nextAddress) {
this.address = address;
this.number = number;
this.nextAddress = nextAddress;
this.next = null;
}
}
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
// 头节点地址
int headAddress = scanner.nextInt();
// 链表长度
int count = scanner.nextInt();
// 存储当前节点
Map<Integer, Node> map = new HashMap<>();
for(int i = 0; i < count; i++) {
int address = scanner.nextInt();
int number = scanner.nextInt();
int nextAddress = scanner.nextInt();
map.put(address, new Node(address, number, nextAddress));
}
//查询头节点
Node head = map.get(headAddress);
Node current = head;
//组建链表
while(current.nextAddress != -1) {
current.next = map.get(current.nextAddress);
current = current.next;
}
//查询中间节点
Node fast = head;
Node slow = head;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
System.out.println(slow.number);
}
}
}