Java 双向链表的实现

shendor 2007-01-09 09:01:30
最好在下面代码的基础上加入代码来实现,不要删除其中的代码
我是新手,加下列代码中没有的知识点我看不懂!谢谢!
public class Ktlx5
{
public static void main(String[] s)
{
Link2 n = new Link2();
for(int i = 1; i < 100; i++)
{
n.addNode(new Node2(i));
}
n.print();
n.insertBefore(new Node2(25), n.setNode(15));
}
}

class Link2
{
private Node2 head = null;
private Node2 end = null;
private Node2 current = null;
public void addNode(Node2 n)
{
if(head == null)
{
head = end = n;
}
else
{
end.next = n;
end = end.next;
}
}
public void insertBefore(Node2 newnode, Node2 node)
//在前面加
{
newnode.next = node;
newnode.before = node.before;
node.before = newnode;
node.before.before.next = newnode;
}
public void insertAfter(Node2 newnode, Node2 node)
//在后面加
{
newnode.before = node;
newnode.next = node.next;
node.next = newnode;
node.next.next.before = newnode;
}
public void deleteNode(Node2 node) //删除
{
node.before.next = node.next;
node.next.before = node.before;
node.next = null;
node.before = null;
}
public void print()
{
current = head;
while(current != null)
{
System.out.println(current.key);
current = current.next;
}
}
public Node2 setNode(int key)
{
current = head;
while(current == null && current.key != key)
{
current = current.next;
}
return current;
}
}

class Node2
{
public int key = 0;
public Node2 next = null; //后一个
public Node2 before = null; //前一个
public Node2(int key)
{
this.key = key;
}
}
最好在上面代码的基础上加入代码来实现,不要删除其中的代码
...全文
2538 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yihongyan 2008-12-25
  • 打赏
  • 举报
回复
谢谢这位仁兄,帮我大忙
我JAVA老师布置的课程设计的题目就是双向链表的实现
老师的第二个要求就是要使用界面显示结果
如果可能能不能帮我实现
对了,一个建议代码的解释更详细些
对于我们对JAVA不懂的人大有用处
总之,还是谢你
shendor 2007-01-12
  • 打赏
  • 举报
回复
public class Lx1_lianbiao
{
public static void main(String args[])
{
Link n = new Link();
for(int i=1;i<5;i++)
{
n.addNode(new Node(i));
}
n.insertAfter(n.setNode(3),new Node(200));
n.insertBefore(n.setNode(-1),new Node(100));
n.deleteNode(n.setNode(3));
n.print();
n.printDes();
}
}
class Link //链表
{
Node head = null;
Node end = null;
Node current = null;
void addNode(Node n)
{
if(head == null)
{
head = end = n;
}
else
{
end.next = n;
n.before = end;
end = end.next;
end.before = n.before;
}
end = n;
}
public Node setNode(int key)
{
current = head;
if(key != 0)
{
while(current != null && current.key != key)
{
current = current.next;
}
return current;
}
return null;
}
public void insertAfter(Node node,Node newnode) //后插入
{
if(node == null)
{
System.out.println("您要插入的位置不存在,请在链表范围内插入!");
}
else if(node.key == end.key)
{
end = newnode;
node.next = newnode;
newnode.before = node;
}
else
{
node.next.before = newnode;
newnode.next = node.next;
node.next = newnode;
newnode.before = node;
}
}
public void insertBefore(Node node,Node newnode) //前插入
{
if(node == null)
{
System.out.println("您要插入的位置不存在,请在链表范围内插入!");
}
else if(node.key == head.key)
{
head = newnode;
node.before = newnode;
newnode.next = node;
}
else
{
node.before.next = newnode;
newnode.before = node.before;
node.before = newnode;
newnode.next = node;
}
}
public void deleteNode(Node node) //删除
{
if(node.key > head.key && node.key < end.key)
{
node.before.next = node.next;
node.next.before = node.before;

}
else if(node.key == end.key)
{
end = node.before;
end.next = null;
}
else if(node.key == head.key)
{
head = node.next;
head.before = null;
node = null;
}
}

void print()
{
current = head;
while(current!=null)
{
System.out.println(current.key);
current = current.next;
}
}
void printDes()
{
current = end;
while(current!=null)
{
System.out.println(current.key);
current = current.before;
}
}
}
class Node //节点
{
int key = 0;
Node next = null;
Node before = null;
Node(int key)
{
this.key = key;
}
}
这回终于对了,出错的地方都改过来了!
hoverlees 2007-01-11
  • 打赏
  • 举报
回复
public void insertAfter(Node3 after, Node3 key) {
current.next.before = key; //没仔细看你的代码,不过我认为你这儿不对.
key.next = current.next;
current.next = key;
key.before = current;
}
lcllcl987 2007-01-11
  • 打赏
  • 举报
回复
java集合框架已提供了链表
z_lping 2007-01-10
  • 打赏
  • 举报
回复
可以参考JDK里面LinkedLis,那个就是个Doublly Linked List。
shendor 2007-01-10
  • 打赏
  • 举报
回复
我又改了一下,但删除功能有错误,请各位帮忙看看
public class Lx2
{
public static void main(String args[])
{
Link3 n = new Link3();
for(int i=0;i<5;i++)
{
n.addNode(new Node3(i));
}
n.insertAfter(n.setNode(1),new Node3(100));
n.deleteNode(n.setNode(4));
n.print();
}
}

//链表
class Link3
{
Node3 head = null;
Node3 end = null;
Node3 current = null;
void addNode(Node3 n)
{
if(head == null)
{
head = end = n;
}
else
{
end.next = n;
n.before = end;
}
end = n;
}
public Node3 setNode(int key)
{
current = head;
while(current != null && current.key != key)
{
current = current.next;
}
return current;
}
public void insertAfter(Node3 after,Node3 key)
{
current.next.before = key;
key.next = current.next;
current.next = key;
key.before = current;
}

public void deleteNode(Node3 node) //删除
{
node.before.next = node.next;
node.next.before = node.before;
node.next = null;
node.before = null;
}

void print()
{
current = head;
while(current!=null)
{
System.out.println(current.key);
current = current.next;
}
}
}
//节点
class Node3
{
int key = 0;
Node3 next = null;
Node3 before = null;
Node3(int key)
{
this.key = key;
}
}
我又改了一下,但删除功能有错误,请各位帮忙看看
shendor 2007-01-09
  • 打赏
  • 举报
回复
谢谢大哥,我现在就是单向会连,双向不会(向前的连接没做,就卡在这了),顺便表扬一下我的老师,他教课很容易懂,每次留作业都给下次授课做准备,所以这要认真的完成作业,新的课程都很容易懂。
z_lping 2007-01-09
  • 打赏
  • 举报
回复
刚开始学就溜这样的作业呀?嗬嗬。
你的Node写得没问题,重要的是Node与Node之间的那些线,得连好了,最简单的办法呀,就是画图,一步步的画出来,哪里切断,哪里接上,一目了然。

加油呀。
shendor 2007-01-09
  • 打赏
  • 举报
回复
我刚刚学Java,只能写到这,如果可以实现双向链表,里面的插入、删除就都可以实现了,这也是我们老师给留的作业,希望各位前辈指点。
z_lping 2007-01-09
  • 打赏
  • 举报
回复
作业?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧