zoukankan      html  css  js  c++  java
  • 算法(Algorithms)第4版 练习 1.3.26

    方法实现:

    //1.3.26
        /**
         * remove all of the nodes in the list that have key as its item field
         * 
         * @param list the linked list of T
         * @param key the T key
         * 
         * @return void
         * 
         */
        public static <T> void remove(LinkedList<T> list, T key) {
            Node<T> precurrent;
            precurrent = findPreNode(list, key);
            
            //remove all of the nodes
            while(precurrent.next != null) {
                
                if(precurrent.next == list.first)
                    list.first = list.first.next;
                else
                    precurrent.next = precurrent.next.next;
                
                precurrent = findPreNode(list, key);
            }
            
        }
        
        //1.3.26
        /**
         * find the node in the list whose item equals key
         * 
         * @param key the T key
         * 
         * @return return the previous node whose item equals key
         */
        private static <T> Node<T> findPreNode(LinkedList<T> list, T key) {
            Node<T> precurrent = new Node<T>();
            precurrent.next = list.first;
            
            while(precurrent.next != null && !precurrent.next.item.equals(key)) {
                precurrent = precurrent.next;
            }
            
            return precurrent;
        }

    测试用例:

    package com.qiusongde.linkedlist;
    
    import edu.princeton.cs.algs4.StdIn;
    import edu.princeton.cs.algs4.StdOut;
    
    public class Exercise1326 {
    
        public static void main(String[] args) {
            
            String key = "to";
            
            LinkedList<String> list = new LinkedList<String>();
            
            while(!StdIn.isEmpty()) {
                String s = StdIn.readString();
                list.insertAtBeginning(s);
                StdOut.println("insertAtBeginning success: " + s);
                StdOut.println(list);
            }
            
            LinkedList.remove(list, key);
            StdOut.println("remove success:" + key);
            StdOut.println(list);
            
        }
    
    }

    输入数据:

    to
    be
    or
    not
    to

    结果1:

    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 
    remove success:to
    not or be 

    结果2:

    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 
    remove success:not
    to or be to 

    结果3:

    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
    remove success:qiu
    to not or be to

  • 相关阅读:
    网站的安全架构
    Charles Proxy for Mac & Windows (4.1.3)破解激活工具
    charles抓包工具的中文乱码解决方法
    Charles 从入门到精通
    go语言知识点
    Golang Import使用入门
    算法图解之选择排序
    算法图解之数组和链表
    算法图解之大O表示法
    算法图解之内存的工作原理
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6512182.html
Copyright © 2011-2022 走看看