Remove-at-index函数删除索引之前的所有元素



我使用这个remove方法来移除列表的第三个元素。但它会删除指定索引之前的所有元素。所以如果Jhon,Sam,Philip,Emma是列表元素,如果我去掉第三个元素,剩下的唯一元素就是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);
    }
}

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

首先,如果index == 0,则应该只更改listPtr

在所有其他情况下,都需要调整位于index - 1位置的节点的node.next

附言:将index作为List的数据成员看起来像是一场等待发生的事故。

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++;
      }
  }
}

相关内容

  • 没有找到相关文章