• 算法(Algorithms)第4版 练习 1.3.20


    方法实现:

    //1.3.20
        /**
         * delete the kth element in a linked list, if it exists. 
         * 
         * @param k the kth element, it should larger than 1
         * @throws IllegalArgumentException if k < 1
         * @throws NoSuchElementException if the size of the list is less than k
         */
        public Item delete(int k) {
            
            if(k < 1)
                throw new IllegalArgumentException("k must larger than 1");
            
            Node<Item> precurrent = new Node<Item>();
            precurrent.next = first;
            Item item;
            
            while(precurrent.next != null && k > 1) {
                precurrent = precurrent.next;
                k--;
            }
            
            if(precurrent.next == null) 
                throw new NoSuchElementException("LinkedList hasn't so many elements");
            
            item = precurrent.next.item;
            if(precurrent.next == first)
                first = precurrent.next.next;
            else
                precurrent.next = precurrent.next.next;
            
            return item;
        }

    测试用例:

    package com.qiusongde.linkedlist;
    
    import edu.princeton.cs.algs4.StdIn;
    import edu.princeton.cs.algs4.StdOut;
    
    public class Exercise1320 {
    
        public static void main(String[] args) {
            
            LinkedList<String> list = new LinkedList<String>();
            
            while(!StdIn.isEmpty()) {
                String s = StdIn.readString();
                list.insertAtBeginning(s);
                StdOut.println("insertAtBeginning success: " + s);
                StdOut.println(list);
            }
            
            int k = 5;
            String s = list.delete(k);
            StdOut.println("delete " + k + "th Element success: "+ s);
            StdOut.println(list);
            
            for(int i = 0; i < 4; i++) {
                k = 1;
                s = list.delete(k);
                StdOut.println("delete " + k + "th Element success: "+ s);
                StdOut.println(list);
            }
            
            k = 5;
            s = list.delete(k);
            StdOut.println("delete " + k + "th Element success: "+ s);
            StdOut.println(list);
        }
    
    }

    测试数据:

    to
    be
    or
    not
    to

    输出结果:

    insertAtBeginning success: to
    to 
    insertAtBeginning success: be
    be to 
    insertAtBeginning success: or
    or be to 
    insertAtBeginning success: not
    not or be to 
    insertAtBeginning success: to
    to not or be to 
    delete 5th Element success: to
    to not or be 
    delete 1th Element success: to
    not or be 
    delete 1th Element success: not
    or be 
    delete 1th Element success: or
    be 
    delete 1th Element success: be
    
    Exception in thread "main" java.util.NoSuchElementException: LinkedList hasn't so many elements
        at com.qiusongde.linkedlist.LinkedList.delete(LinkedList.java:130)
        at com.qiusongde.linkedlist.Exercise1320.main(Exercise1320.java:32)
  • 相关阅读:
    织梦标签调用:根据特定需求调用文章的标签代码
    织梦DedeCMS信息发布员发布文章阅读权限不用审核自动开放亲测试通过!
    javascript中的this和e.target的深入研究
    vue-cli入门(二)——项目结构
    Mysql千万级大数据量查询优化
    MySQL大数据量分页查询方法及其优化
    Spring Bean的生命周期分析
    多线程下,两个线程交替打印0 -100,使用wait()和notify()
    ReentrantLock
    多线程交替打印ABC的多种实现方法
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6512590.html
Copyright © 2020-2023  润新知