OJ-------从单向链表中删除指定节点

来源:互联网 发布:什么是访客网络设置 编辑:程序博客网 时间:2024/06/07 19:57


题目描述

输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表结点定义如下:struct ListNode{      int       m_nKey;      ListNode* m_pNext;};详细描述:本题为考察链表的插入和删除知识。链表的值不能重复构造过程,例如1 -> 23 -> 25 -> 14 -> 57 -> 2最后的链表的顺序为 2 7 3 1 5 4删除 结点 2则结果为 7 3 1 5 4

输入描述:

1 输入链表结点个数2 输入头结点的值3 按照格式插入各个结点4 输入要删除的结点的值

输出描述:

输出删除结点后的序列

输入例子:

523 24 35 21 43

输出例子:

2 1 5 4 ////正确结果应该是 2 4 5 1

算法实现




import java.util.List;import java.util.Scanner;public class Main {    private static class ListNode {        int key;        ListNode next;    }    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));        while (scanner.hasNextLong()) {            int num = scanner.nextInt();            int h = scanner.nextInt();            ListNode head = new ListNode();            head.key = h;            for (int i = 0; i < num - 1; i++) {                int newVal = scanner.nextInt();                int afterVal = scanner.nextInt();                addNode(newVal, afterVal, head);            }            int del = scanner.nextInt();            head = delete(del, head);            System.out.println(getString(head));        }        scanner.close();    }    private static String getString(ListNode head) {        StringBuilder builder = new StringBuilder();        while (head!= null) {            builder.append(head.key).append(' ');            head = head.next;        }//        return builder.substring(0, builder.length() - 1);        return builder.toString();    }    private static void addNode(int newVal, int afterVal, ListNode head) {        ListNode n = head;        while (n != null) {            if (n.key == afterVal) {                ListNode node = new ListNode();                node.key = newVal;                node.next = n.next;                n.next = node;                break;            }            n = n.next;        }    }    private static ListNode delete(int val, ListNode head) {        if (head.key == val) {            ListNode ret = head.next;            head.next = null;            return ret;        } else {            ListNode prev = head;            while (prev.next != null) {                if (prev.next.key == val) {                    prev.next = prev.next.next;                    break;                }                prev = prev.next;            }            return head;        }    }}


0 0
原创粉丝点击