您的位置:首页 > 编程语言 > Java开发

JAVA实现双向链表的增删功能

2018-03-26 03:19 591 查看
JAVA实现双向链表的增删功能,完整代码
package linked;

class LinkedTable{

}
public class LinkedTableTest {

//构造单链表
static Node node1 = new Node("name1");
static Node node2 = new Node("name2");
static Node node3 = new Node("name3");
static Node node4 = new Node("name4");
static Node node5 = new Node("name5");

public static void main(String[] args)
{
//设置指针
setPoint();

//循环遍历
System.out.println("*******初始链表*******");
out(node1,node5);
System.out.println();

//插入节点在node2的后面
addNode(node2,node3);

// 循环遍历
System.out.println("*******插入node2.5*******");
out(node1, node5);
System.out.println();

//删除节点
node2.setNextNode(node3);
node3.setNextNodeF(node2);

// 循环遍历
System.out.println("*******删除node2.5*******");
out(node1, node5);
System.out.println();

}

//设置指针
public static void setPoint()
{
//设置正向指针
node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);
node4.setNextNode(node5);
//设置反向指针
node5.setNextNodeF(node4);
node4.setNextNodeF(node3);
node3.setNextNodeF(node2);
node2.setNextNodeF(node1);
}

//循环遍历单链表
public static void outLinked(Node startNode){
Node node= new Node();
node.setNextNode(startNode);
do
{
node=node.getNextNode();
System.out.print(node.getName()+"----");
}while(node.getNextNode()!=null);
}

//反向循环遍历单链表
public static void outLinkedF(Node endNode){
Node node= new Node();
node.setNextNodeF(endNode);
do
{
node=node.getNextNodeF();
System.out.print(node.getName()+"----");
}while(node.getNextNodeF()!=null);
}

//循环遍历
public static void out(Node startNode,Node endNode)
{

outLinked(startNode);
System.out.println();
outLinkedF(endNode);

}

//插入节点
public static void addNode(Node preNode,Node nextNode)
{
Node node_add = new Node("name2.5");
node_add.setNextNode(preNode.getNextNode());
preNode.setNextNode(node_add);

node_add.setNextNodeF(nextNode.getNextNodeF());
nextNode.setNextNodeF(node_add);
}

}

class Node {
private String name;
private Node nextNode;
private Node nextNodeF;
public void setName(String name)
{
this.name=name;
}
public void setNextNode(Node nextNode)
{
this.nextNode=nextNode;
}
public void setNextNodeF(Node nextNodeF)
{
this.nextNodeF=nextNodeF;
}
public String getName()
{
return this.name;
}
public Node getNextNode()
{
return this.nextNode;
}
public Node getNextNodeF()
{
return this.nextNodeF;
}
public Node(String name)
{
this.name=name;
this.nextNode=null;
}
public Node( )
{

}

}

1,构造node节点,需要两个指针,一个正向存储下一个元素的位置,一个反向存储下一个元素的位置

参数说明:  name:用于存储node自身的信息  nextNode:用于存储正向指针  nextNodeF:用于存储反向指针
class Node {
private String name;
private Node nextNode;
private Node nextNodeF;
public void setName(String name)
{
this.name=name;
}
public void setNextNode(Node nextNode)
{
this.nextNode=nextNode;
}
public void setNextNodeF(Node nextNodeF)
{
this.nextNodeF=nextNodeF;
}
public String getName()
{
return this.name;
}
public Node getNextNode()
{
return this.nextNode;
}
public Node getNextNodeF()
{
return this.nextNodeF;
}
public Node(String name)
{
this.name=name;
this.nextNode=null;
}
public Node( )
{

}

}

2,创建节点,设置指针连接节点正向指针:指向下一个节点反向节点:指向上一个节点
//构造单链表
static Node node1 = new Node("name1");
static Node node2 = new Node("name2");
static Node node3 = new Node("name3");
static Node node4 = new Node("name4");
static Node node5 = new Node("name5");

public static void setPoint()
{
//设置正向指针
node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);
node4.setNextNode(node5);
//设置反向指针
node5.setNextNodeF(node4);
node4.setNextNodeF(node3);
node3.setNextNodeF(node2);
node2.setNextNodeF(node1);
}

3,将链表循环遍历输出
public static void outLinked(Node startNode){
Node node= new Node();
node.setNextNode(startNode);
do
{
node=node.getNextNode();
System.out.print(node.getName()+"----");
}while(node.getNextNode()!=null);
}

public static void outLinkedF(Node endNode){
Node node= new Node();
node.setNextNodeF(endNode);
do
{
node=node.getNextNodeF();
System.out.print(node.getName()+"----");
}while(node.getNextNodeF()!=null);
}

4,添加节点
public static void addNode(Node preNode,Node nextNode)
{
Node node_add = new Node("name2.5");
node_add.setNextNode(preNode.getNextNode());
preNode.setNextNode(node_add);

node_add.setNextNodeF(nextNode.getNextNodeF());
nextNode.setNextNodeF(node_add);
}

5,删除节点
node2.setNextNode(node3);
node3.setNextNodeF(node2);
  class Node {private String name;private Node nextNode;private Node nextNodeF;public void setName(String name){this.name=name;}public void setNextNode(Node nextNode){this.nextNode=nextNode;}public void setNextNodeF(Node nextNodeF){this.nextNodeF=nextNodeF;}public String getName(){return this.name;}public Node getNextNode(){return this.nextNode;}public Node getNextNodeF(){return this.nextNodeF;}public Node(String name){this.name=name;this.nextNode=null;}public Node( ){}}http://www.ayp2545.cn/ http://www.pgn4393.cn/ http://www.npd9270.cn/ http://www.sfi6002.cn/ http://www.nne5492.cn/ http://www.yai2320.cn/ http://www.ics4171.cn/ http://www.sfv9051.cn/ http://www.ccg1407.cn/ http://www.hjn1455.cn/ http://www.ygf6271.cn/ http://www.vfm1218.cn/ http://www.aaa4131.cn/ http://www.guc5469.cn/ http://www.dcj3647.cn/ http://www.utm9669.cn/ http://www.ahg7671.cn/ http://www.nxn1651.cn/ http://www.rrq5757.cn/ http://www.pbr1256.cn/ http://www.oai3459.cn/ http://www.vaj6107.cn/ http://www.xfc0942.cn/ http://www.evc2128.cn/ http://www.bwu7749.cn/ http://www.rmf4655.cn/ http://www.pyq8206.cn/ http://www.sdk5229.cn/ http://www.sez8143.cn/ http://www.tfn8353.cn/ http://www.uem3051.cn/ http://www.tza5452.cn/ http://www.epp9269.cn/ http://www.tsr7510.cn/ http://www.xhv3734.cn/ http://www.vrc9998.cn/ http://www.dsf5404.cn/ http://www.xjm6385.cn/ http://www.iaz1229.cn/ http://www.kcv6320.cn/ http://www.usl0022.cn/ http://www.abo8793.cn/ http://www.qeb9677.cn/ http://www.atx6995.cn/ http://www.buv6436.cn/ http://www.lll4952.cn/ http://www.cjx5965.cn/ http://www.otg2660.cn/ http://www.bmn9515.cn/ http://www.ewf1466.cn/ http://www.cbc3788.cn/ http://www.iqp5694.cn/ http://www.drr8954.cn/ http://www.blk2293.cn/ http://www.tjx3222.cn/ http://www.ksy2010.cn/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: