zoukankan      html  css  js  c++  java
  • 算法(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)
  • 相关阅读:
    up_modembin.sh
    cpu主频信息
    计算机网络中通信协议都有哪些
    可导与连续的关系
    linux块设备驱动之实例
    CentOs 设置静态IP 方法
    phalcon:非空字段不能在beforeCreate赋值,可以改用beforeValidationOnCreate
    phalcon: crypt-encrypt/decrypt用法
    phalcon: 缓存片段,文件缓存,memcache缓存
    phalcon: 视图分层渲染,或包含其他页面
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6512590.html
Copyright © 2011-2022 走看看