简单例子:
代码:(Node2这个POJO类,在LinkList方法的main调用对应的addNode或delNode方法)
package EndTest;
import java.io.IOException;
import java.util.Scanner;
/**
*
* @author lenovopc
*链表:一个链表由很多节点组成,每个节点包含表示内容的数据域和指向下一个节点的链域两部分。
*正是通过链域将节点连接形成一个表。围绕链表的基本操作有添加节点、删除节点和查找节点等。
*/
public class LinkList {
private Node2 head;
public LinkList(){
this.head = new Node2(0);
}
public void addNode(int num){
Node2 newnode = new Node2(num);
Node2 p = head;
for(;p.getNext()!=null;p = p.getNext()){}//让p找到末端,在末端加上节点
p.setNext(newnode);
newnode.setPre(p);
if(p.getPre()!=null)
System.out.println("add----num("+num+")----上一个节点"+p.getPre().getNum()+" 数据:"+p.getNum()+" 下一个节点:"+p.getNext().getNum()+"*****临时上节点:"+p.getNext().getPre().getNum()+" 临时数据:"+p.getNext().getNum()+" 临时下节点:"+p.getNext().getNext());
else{
System.out.println("add---num("+num+")---上一个节点"+p.getPre()+" 数据:"+p.getNum()+" 下一个节点:"+p.getNext().getNum()+"*****临时上节点:"+p.getNext().getPre().getNum()+" 临时数据:"+p.getNext().getNum()+" 临时下节点:"+p.getNext().getNext());
}
}
public void printInfo(){
System.out.println("");
for(Node2 p = head.getNext();p!=null;p=p.getNext()){
System.out.print(p.getNum() + " ");//初始化,num为0,所以从head.getNext()下一节点的num开始,,,,遍历下节点
}
System.out.println("");
Node2 p = head;
for(;p.getNext()!=null;p = p.getNext()){}//找到p的末端
for(;p!=null && p!=head;p=p.getPre()){//遍历上节点
System.out.print(p.getNum() + " ");
}
}
/**
* 删除节点
* @param num
*/
public void delNode(int num){
for(Node2 p = head.getNext();p!=null;p=p.getNext()){
if(p.getNum()==num){// 找到,删除
p.getPre().setNext(p.getNext());
p.getNext().setPre(p.getPre());
p.setNext(null);
p.setPre(null);
}
}
}
static int MAX=10;
public static void main(String[] args) {
//编写实现双链表删除节点的程序
LinkList ll = new LinkList();
ll.addNode(3);
ll.addNode(5);
ll.addNode(7);
ll.addNode(9);
ll.printInfo();
ll.delNode(5);
ll.printInfo();
}
class Node2{
private int num;
private Node2 next;
private Node2 pre;
public Node2(int num){
this.num = num;
this.next = null;
this.pre = null;
}
public Node2 getNext() {
return next;
}
public void setNext(Node2 next) {
this.next = next;
}
public Node2 getPre() {
return pre;
}
public void setPre(Node2 pre) {
this.pre = pre;
}
public int getNum() {
return num;
}
}
打印结果:
图解:
添加节点:
删除节点: