0

我使用此删除方法删除列表的第三个元素。但它会删除指定索引之前的所有元素。因此,如果 Jhon、Sam、Philip、Emma 是列表元素,如果我删除第 3 个元素,则剩下的唯一元素是 Nick。我怎样才能解决这个问题?

import java.util.*;

class List {
    Customer listPtr;
    int index;

    public void add(Customer customer) {
        Customer temp = customer;
        if (listPtr == null) {
            listPtr = temp;
            index++;
        } else {
            Customer x = listPtr;
            while (x.next != null) {
                x = x.next;
            }
            x.next = temp;
            index++;
        }
    }

    public void remove(int index) {
        int size = size();
        Customer tmp = listPtr, tmp2;
        int i = 0;
        while (i != size) {
            if ((i + 1) == index) {
                tmp2 = tmp;
                listPtr = tmp2.next;
                break;
            }
            tmp = tmp.next;
            ++i;
        }
    }

    public int size() {
        int size = 0;
        Customer temp = listPtr;
        while (temp != null) {
            temp = temp.next;
            size++;
        }
        return size;
    }

    public void printList() {
        Customer temp = listPtr;
        while (temp != null) {
            System.out.println(temp);
            temp = temp.next;
        }
    }
}

class DemoList {
    public static void main(String args[]) {
        List list = new List();
        Customer c1 = new Customer("10011", "Jhon");
        Customer c2 = new Customer("10012", "Sam");
        Customer c3 = new Customer("10013", "Philip");
        Customer c4 = new Customer("10014", "Emma");        
        list.add(c1);
        list.add(c2);
        list.add(c3);
        list.add(c4);
        list.remove(3);
        System.out.println(list.size());
        list.printList();
    }
}

class Customer {
    String id;
    String name;
    Customer next;

    public Customer(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String toString() {
        return id + " : " + name;
    }

    public boolean equals(Object ob) {
        Customer c = (Customer) ob;
        return this.id.equals(c.id);
    }
}
4

2 回答 2

2

该方法存在几个问题remove()

首先,你应该只改变listPtrif index == 0

在所有其他情况下,您需要调整node.nextposition 处的节点index - 1

PSindex作为数据成员,List看起来像是一场等待发生的事故。

于 2013-08-12T06:43:44.740 回答
0
public void remove(int index) {
  if (i == 0) {
      // TODO: do some checks (listPtr is set, has next...)
      listPtr = listPtr.next;
  }
  else {
      int currentIndex = 0;
      Customer currentElement = listPtr;
      while (currentIndex != size()) {
          if ((currentIndex + 1) == index) {
              currentElement.next = currentElement.next.next;
              break;
          }
          currentElement = currentElement.next;
          currentIndex++;
      }
  }
}
于 2013-08-12T06:51:25.013 回答