z*****0 发帖数: 63 | 1 请不要嘲笑我的无知,我在看cc150的时候,给的答案都是用LinkedListNode,但是我
在java编辑中,LinkedListNode 下面是红色的波浪,说没有此定义的class。我在网上
搜索 找到了 http://fisheye.igniterealtime.org/browse/openfire/trunk/src/java/org/jivesoftware/util/LinkedListNode.java?r=13651&r=13651 这个网址,我下载了这里得linkelistnode得定义。感觉还是不对。
根据我对答案的理解,她用的是一个双向链表,于是我写了这个class:
package cc150;
public class dNode {
private dNode pre = null;
private dNode next = null;
private int data;
dNode(int data){
this.data = data;
}
void addNode(dNode cur, int i){
dNode newNode = new dNode(i);
if(cur == null){
cur = newNode;
}else{
while(cur.getNext() != null){
cur = cur.getNext();
}
cur.setNext(newNode);
newNode.setPre(cur);
cur = newNode;
}
}
void removeNode(dNode cur){
cur.getPre().setNext(cur.getNext());
cur.getNext().setPre(cur.getPre());
}
dNode getPre(){
return pre;
}
dNode getNext(){
return next;
}
int getData(){
return data;
}
void setPre(dNode pre){
this.pre = pre;
}
void setNext(dNode next){
this.next = next;
}
void setData(int data){
this.data = data;
}
}
在解这道题的第一步可以用 buffer的时候,我是这么写的:
public static void deleteDup(dNode cur){//with temporary buffer
HashMap list = new HashMap();
while(cur.getNext() != null){
if(list.containsValue(cur.getData())){
cur.removeNode(cur);
}else{
list.put(null, cur.getData());
}
cur = cur.getNext();
}
}
public static void print(String s, dNode test){
while(test != null ){
System.out.println(s+" "+test.getData());
test = test.getNext();
}
}
public static void main(String[] args){
dNode n1 = new dNode(1);
n1.addNode(n1, 1);
n1.addNode(n1, 2);
n1.addNode(n1, 3);
print("Before deleting", n1);
deleteDup(n1);
print("After deleting", n1);
}
第二步 不可以用buffer 我是这么写的:
public static void deleteDup2(dNode n){//without buffer
dNode cur = n;
dNode check = n;
while(cur != null){
check = cur.getPre();
while(check != null){
if(cur.getData() == check.getData()){
cur.removeNode(cur);
}
check = check.getPre();
}
cur = cur.getNext();
}
}
因为是第一次刷题,我不知道我这样写有没有不妥之处,想要实现的功能是可以实现的
。希望路过的大神帮我看一下。
如果有大神能告诉我 linkedlistnode 怎么才能用,跪谢 :) |