题解 | #从单向链表中删除指定值的节点#

从单向链表中删除指定值的节点

http://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f

HJ48 从单向链表中删除指定值的节点

  • 由题意可知成对输入的数据(a, b)表示以b->a的一段链表,先读入值的为待插入的节点,后读入的值为待插入节点a的前一个节点b。首先判断列表list是否为空,如果为空则先将头节点插入。如果不为空,则按照题意首先检查列表中是否已有待插入节点,若没有则通过获取节点b的索引index,由此可以得到以a节点作为尾节点的子列表temp = list.subList(0,index + 1),将待插入节点b添加至该子列表后面,子列表原有节点自动接到b节点后面。
import java.util.*;
public class Main{

public static void main(String[] args){

    Scanner in = new Scanner(System.in);

    while(in.hasNext()){
        int total = in.nextInt();    //    节点总数
        int primaryHeadNode = in.nextInt();    //    初始头结点

        List<Integer> list = new LinkedList<>();

        while(list.size() != total){
            int back = in.nextInt();
            int front = in.nextInt();
            List<Integer> temp = new LinkedList();

            if(temp.size() != 0){
                list = temp;
                temp.clear();
            }

            if(list.isEmpty()){
                //    如果列表为空,则将初始头结点放入其中
                list.add(primaryHeadNode);
                if(back != primaryHeadNode && front == primaryHeadNode) list.add(back);
                else list.add(front);
            }else{
                //    如果不为空,首先判断back节点是否已经存在于列表中,如果不存在则插入
                if(!list.contains(back)){
                    int index = list.indexOf(front);

                    if(index + 1 == list.size()){
                        //    如果需要插入的元素在列表尾部,则直接添加至末尾
                        list.add(back);
                    }else{
                        temp = list.subList(0, index+1);
                        temp.add(back);
                    }
                }
            }
        }
        //    输出结果
        int deleteNode = in.nextInt();
        for(int num : list){
            if(num != deleteNode) 
                System.out.print(num + " ");
        }
    }

    in.close();
}

}

全部评论

相关推荐

真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务