算法(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