簡體   English   中英

如何使用remove方法刪除鏈表中的第一個節點

[英]How do I remove the first node in a linked list with a remove method

我想創建一個鏈表,然后用1-100填充它。 之后,我打印出所有的偶數,而沒有實際從列表中刪除奇數,然后再次打印出偶數,但是將它們加倍。 完成這些操作后,我從鏈接列表中刪除了奇數並打印出列表。 我提到的最后一步是掛斷電話。 其他一切工作正常,只是我的remove方法刪除了除1以外的所有奇數。在我的主要方法中,我使用了if語句,該語句說如果節點%2中包含的數字等於零,則刪除該節點。 它適用於除第一個節點以外的每個節點。 謝謝你們給我的任何幫助。 我的代碼如下。

import java.util.*;

/*
 * My ListNode class
 */
class ListNode<Integer> {
private Integer item;
private ListNode<Integer> next;

public ListNode(Integer item) {
    this.item = item;
    next = null;
}

public ListNode(Integer item, ListNode<Integer> next) {
    this.item = item;
    this.next = next;
}

public Integer getItem() {
    return item;
}

public ListNode<Integer> getNext() {
    return next;
}

public void setItem(Integer item) {
    this.item = item;
}

public void setNext(ListNode<Integer> next) {
    this.next = next;

}   
}

/*
 * My LinkedList class
 */
class LinkedList<Integer> {
public ListNode<Integer> front;

public LinkedList() {
    front = null;
}

public boolean isEmpty() {
    return front == null;
}

 public boolean contains(int target) {
     for (ListNode<Integer> node = front;
          node != null;
          node = node.getNext()) {
         if (node.getItem().equals(target)) {
             return true;
         }
     }
     return false;
 }

 public int size() {
     int count = 0;
     for (ListNode<Integer> node = front;
          node != null;
          node = node.getNext()) {
         count++;
     }
     return count;
 }

 public String toString() {
     String result = "( ";
     for (ListNode<Integer> node = front;
          node != null;
          node = node.getNext()) {
         result += node.getItem() + " ";
     }
     return result + ")";
 }

 public Integer get(int index) {
     ListNode<Integer> node = front;
     for (int i = 0; i < index; i++) {
         node = node.getNext();
     }
     return node.getItem();
 }

 public void set(int index, Integer target) {
     ListNode<Integer> node = front;
     for (int i = 0; i < index; i++) {
         node = node.getNext();
     }
     node.setItem(target);
 }

 public void add(int index, int target) {
     if (isEmpty()) {
         front = new ListNode(target);
     } else {
         ListNode last = front;
         while (last.getNext() != null) {
             last = last.getNext();
         }
         last.setNext(new ListNode(target));
     }
 }

 public Integer remove(int index) {
     ListNode<Integer> node = front;
     ListNode<Integer> prev = front;
     for (int i = 0; i < index; i++) {
         prev = node;
         node = node.getNext();
 }
     prev.setNext(node.getNext());
     return node.getItem();
}
 }
public class LinkedListTest {
//interface Removal {
    //Integer remove (Integer item);
//}
public static void main(String[] args) {
    LinkedList<Integer> list = new LinkedList<Integer>();

    System.out.println(list);

    System.out.println("The list size is " + list.size());      
    System.out.println();

    /*
     * This adds the numbers 1 through 100 to a LinkedList
     */
    for (int i = 1; i <= 100; i++)
        list.add(0, i);

    System.out.println(list);


    System.out.println("The list size is " + list.size());
    System.out.println();

    /*
     * This prints out only even numbers by excluding indexes that are even,
     * because all the even numbers are held in the odd numbered indexes, thus 
     * index 0 is 1 but index 1 is 2, index 3 is 4
     */
    for (int i = 0; i < list.size(); i++) 
        if (i % 2 == 1) {
            System.out.print(list.get(i) + " ");
        }

    System.out.println();

    System.out.println("The list size is " + list.size());
    System.out.println();

    /*
     * This doubles even numbers                    
     */
    for (int i = 0; i < list.size(); i++) 
        if (i % 2 == 1) {
            int result = list.get(i) * 2;
        System.out.print(result + " ");
        }
    System.out.println();
    System.out.println("The list size is " + list.size());
    System.out.println();

    for (int i = 0; i < list.size(); i++) 
            if (list.get(i) % 2 == 1) {
                list.remove(i);
            }

    System.out.print(list);
    System.out.println();
    System.out.println("The list size is " + list.size());
    System.out.println();
    /*
     * These contain methods only work for the first list created
     */
    System.out.println("Does the list contain 32? " + list.contains(32));

    System.out.println("Does the list contain 33? " + list.contains(33));

}   
}

index值為0時, remove方法實際上不起作用。.因為i<index條件為false,所以您的nodeprev都被初始化為front並且未執行循環。 因此,對於index=0的情況,您必須添加另一個條件。在remove方法的開頭添加這些行即可解決此問題。

if(index==0){
    ListNode<integer>temp=front;
    front=front.getNext();
    return temp.getItem();
}

希望它能幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM