码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA带表头的双向链表插入,删除,查找操作

时间:2017-11-02 11:32:46      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:头结点   []   sem   下标   定位   lis   pos   link   amp   

1.建立双向链表的结点Node
2.建立类Linkedlist,成员head是指向表头的引用,在linkedlist中定义链表的操作方法。
ps:插入删除操作要判断pos,如果在表尾,要特判防止出现空引用。
public class Node {//建立双向链表的结点
    public Node left;
    public Node right;
    public int data;
    public Node(){
        this.left=null;
        this.right=null;
        this.data=0;
    }
    public Node(int data) {
        this.data=data;
    }
    
}

 


public
class Linkedlist { public Node head;//指向表头地址的引用 public int length; public Linkedlist(){//建立头结点 length=0; head=new Node(); head.data=0; head.left=null; head.right=null; } public boolean Insert(int pos,Node node) {//在下标为pos-1和pos的结点之间插入node结点 int count=0; Node preNode=head; while(preNode!=null&&count<pos-1) { ++count; preNode=preNode.right; } if(preNode==null||count!=pos-1){ return false; } if(preNode.right==null) { preNode.right=node; node.left=preNode; node.right=null; ++length; return true; } Node nextNode=preNode.right; node.right=nextNode; node.left=preNode; preNode.right=node; nextNode.left=node; ++length; return true; } public boolean Delete(int pos) {//删除指定位置的结点 if(pos<0||pos>=length) { return false; } int count=0; Node curNode=head; while(count!=pos&&curNode!=null) { ++count; curNode=curNode.right; } if(count!=pos||curNode==null) { return false; } if(curNode.right==null) { curNode.left.right=null; curNode=null; } if(curNode.right!=null) {// curNode.left.right=curNode.right; curNode.right.left=curNode.left; } --length; return true; } public int Size() {//返回链表元素个数 return length; } public boolean isEmpty() { if(length==0) { return true; } return false; } public boolean Traverse() {//输出链表 Node preNode=head; while(preNode.right!=null) { preNode=preNode.right; System.out.print(preNode.data+" "); } return true; } public int getData(int pos) {//取得指定位置结点元素 Node preNode=head; int count=0; while(count!=pos) { preNode=preNode.right; ++count; } return preNode.data; } public boolean Delete(Node node) {//删除node结点 Node curNode=head; while(curNode!=node&&curNode!=null) { curNode=curNode.right; } if(curNode!=node) { return false; } if(curNode.right!=null) { curNode.left.right=curNode.right; curNode.right.left=curNode.left; --length; return true; } if(curNode.right==null) { curNode.left.right=null; --length; return true; } return false; } }
public class Main {
    public static void main(String[] args) {
        Linkedlist link=new Linkedlist();
        //System.out.println(link.head==null);
        Node node1=new Node(1);
        Node node2=new Node(3);
        Node node3=new Node(5);
        Node node4=new Node(9);
        Node node5=new Node(2);
        boolean f=link.Insert(1,node1);
        f=link.Insert(2, node2);
        f=link.Insert(3, node3);
        f=link.Insert(4, node4);
        f=link.Insert(5, node5);
        //System.out.println(link.head.data);
        //System.out.println(link.head.right.data);
        //System.out.println(f);
        //Node node=node1;
        link.Delete(2);
        link.Delete(node5);
        boolean g=link.Delete(node3);
       // System.out.println("g="+g);
       //while(node!=null) {
       // System.out.println(node.data);
       // node=node.right;
       // }
       System.out.println("size="+link.Size());
       System.out.println("isempty? "+link.isEmpty());
       link.Traverse();
       System.out.println();
       System.out.println("data2="+link.getData(2));
       
    }
}

 

 

 

JAVA带表头的双向链表插入,删除,查找操作

标签:头结点   []   sem   下标   定位   lis   pos   link   amp   

原文地址:http://www.cnblogs.com/matrix-/p/7770667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!