题目描述:
求单向链表中间的节点值,如果奇数个节点取中间,偶数个取偏右边的那个值。
输入描述:
第一行 链表头节点地址path 后续输入的节点数n
后续输入每行表示一个节点,格式: "节点地址 节点值 下一个节点地址(-1表示空指针)“
输入保证链表不会出现环,并且可能存在一些节点不属于链表。
输出描述:
链表中间节点值。
测试用例:
输入:
00010 4
00000 3 -1
00010 5 12309
11451 6 00000
12309 7 11451
输出:
6
个人解法
不保证通过率
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
/**
*题目描述
* 求单向链表一中间的节点值,如果奇数个节点取中间,偶数个取偏右边的那个值。输入描述:
* 第一行链表头节点地址path后续输入的节点数n
* 后续输入每行表示一个节点,格式:"节点地址 节点值 下一个节点地址(-1表示空指针)"输入保证链表不会出现环,并且可能存在一些节点不属于链表。
* 输出描述:
* 链表中间节点值。测试用例:
* 输入:
* 00010 4
* 00000 3 -1
* 00010 5 12309
* 11451 6 00000
* 12309 7 11451
* 输出:
* 6
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] firstLine = br.readLine().split(" ");
String head = firstLine[0];int count = Integer.parseInt(firstLine[1]);
HashMap<String,String[]> map = new HashMap<>();
for (int i = 0; i < count; i++) {
String[] line = br.readLine().split(" ");
map.put(line[0],new String[]{line[1],line[2]});
}
String addr = head;
ArrayList<String> value = new ArrayList<>();
while (!addr.equals("-1")){
value.add(map.getOrDefault(addr,new String[]{"","-1"})[0]);
addr = map.getOrDefault(addr,new String[]{"","-1"})[1];
}
System.out.println(value.get(value.size()/2));
}
}