【发布时间】:2015-08-18 08:22:06
【问题描述】:
我正在通过首先用排序的元素填充列表来实现一个排序的循环链表,并且还实现了插入和删除功能。但是,在调用 delete 时,它不会更新列表。我尝试在 delete 方法中调试代码,但还没有成功。下面是我的程序的代码sn-p。
class CNode {
public int data;
public CNode next;
public CNode() {
this.data = 0;
this.next = null;
}
public CNode(int data, CNode next) {
this.data = data;
this.next = next;
}
public CNode(int data) {
this.data = data;
this.next = null;
}
}
AND 驱动程序类 -
public class SortedCLL {
public static CNode head = new CNode();
public static CNode last = new CNode();
public static int NoN;
public SortedCLL() {
int N = 3;
int val[] = {4, 2, 6};
Arrays.sort(val);
CNode first = new CNode(val[0]);
head.next = first;
last.next = first;
NoN++;
for (int i = 1; i < N; i++) {
CNode n = new CNode(val[i]);
last.next.next = n;
last.next = n;
n.next = head.next;
NoN++;
}
//DELETING AN ELEMENT
delete(2);
//INSERTING AN ELEMENT
insert(7);
CNode check = head.next;
for (int i = 0; i < NoN; i++) {
System.out.print(check.data + " ");
check = check.next;
}
}
public static void main(String args[]) throws Exception {
new SortedCLL();
}
private void insert(int element) {
CNode n = new CNode(element);
if(element < head.next.data) {
n.next = head.next;
head.next = n;
last.next.next = n;
NoN++;
return;
}
int nodes = NoN - 1;
CNode iter = head;
while(nodes-- > 0){
if(iter.data < element && iter.next.data > element) {
n.next = iter.next;
iter.next = n;
NoN++;
return;
}
}
last.next.next = n;
last.next = n;
n.next = head.next;
NoN++;
return;
}
private void delete(int element) {
//System.out.println( " : " +element);
CNode prev = last.next;
CNode iter = head.next;
int nodes = NoN;
while(nodes-- > 0) {
if(iter.data == element) {
//HERE IT IS PRINTING CORRECT PREV AND NEXT NODE'S DATA.
System.out.println( prev.data + " : " +iter.next.data);
prev.next = iter.next;
NoN--;
return;
}
prev = iter;
iter = iter.next;
}
return;
}
}
检查SortedCLL类中的调试语句,在delete方法中,打印出正确的prev和next值,但输出还是不符合预期。
expected list
4 6 7
program's list
2 4 6 7
任何帮助表示赞赏!
【问题讨论】:
-
我猜 CNode 中的静态 int 应该计算列表的大小?您最好将其保存在 SortedCLL 中。因为该类应该能够处理多个实例。
-
此外,您应该在 main 而不是在构造函数中测试您的类。
-
你明白了,但这仍然不能解决我的问题! :(
-
您所说的是对这个问题进行编程的更好做法,但是即使这样做也不能解决我面临的问题。你能告诉如何解决实际问题。谢谢!
标签: java data-structures sortedlist circular-list