首页 > 编程语言 > 详细

L2-002 链表去重 (25分)(java)

时间:2020-01-31 21:24:36      阅读:114      评论:0      收藏:0      [点我收藏+]
  

给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。

输入格式:

输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 − 来表示。

随后 N 行,每行按以下格式描述一个结点:

地址 键值 下一个结点
 

其中地址是该结点的地址,键值是绝对值不超过1的整数,下一个结点是下个结点的地址。

输出格式:

首先输出去重后的链表,然后输出被删除的链表。每个结点占一行,按输入的格式输出。

输入样例:

00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
 

输出样例:

00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1




因为搜索不到Java版本的所以写一个自己Java实现的,但是最后连个点一直超时
/**
 * 
 */
package com.xingbing.tianti;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import java.util.StringTokenizer;

/**
 * @author 邢兵
 * @data
 * @description
 */
public class L2002 {
	public static void main(String[] args) throws NumberFormatException, IOException {
          Scanner in = new scanner(System.in);
		String start = in.next();
		int n = in.nextInt();
		node arr[] = new node[n];
		LinkedList<node> list = new LinkedList<node>();
		//输入所有信息
		for(int i=0;i<n;i++){
			arr[i] = new node(Reader.next(), Reader.nextInt(), Reader.next());
		}
		//将输入的数据排序
		while(!start.equals("-1")){
			for(int i=0;i<n;i++){
				if(arr[i].id.equals(start)){
					list.add(arr[i]);
					start = arr[i].next;
					break;
				}
			}
		}
		Set<Integer> set = new HashSet<Integer>();
		LinkedList<node> list1 = new LinkedList<node>();
		LinkedList<node> list2 = new LinkedList<node>();
		for(int i=0;i<list.size();i++){
			if(!set.contains(Math.abs(list.get(i).num))){
				set.add(Math.abs(list.get(i).num));
				list1.add(list.get(i));
			}else{
				list2.add(list.get(i));
			}
		}
		for(int i=0;i<list1.size()-1;i++){
			System.out.println(list1.get(i).id+" "+list1.get(i).num+" "+list1.get(i+1).id);
		}
		System.out.println(list1.get(list1.size()-1).id+" "+list1.get(list1.size()-1).num+" -1");
		for(int i=0;i<list2.size()-1;i++){
			System.out.println(list2.get(i).id+" "+list2.get(i).num+" "+list2.get(i+1).id);
		}
		System.out.println(list2.get(list2.size()-1).id+" "+list2.get(list2.size()-1).num+" -1");
	}
}
class node{
	public String id;
	public int num;
	public String next;
	
	public node(String id, int num, String next){
		this.id = id;
		this.num = num;
		this.next = next;
	}
}

  

L2-002 链表去重 (25分)(java)

原文:https://www.cnblogs.com/xuesujun/p/12246618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!