您的位置:首页 > 理论基础 > 数据结构算法

java常用数据结构---线性表---链式存储

2017-06-22 09:10 381 查看
public class Node {

    

    Node next = null;

    int data;

    public Node(int data) {

        this.data = data;

    }

    

    public Node() {

        

    }

    Node head = null;

    public void addNode(int d) {

        Node newNode = new Node(d);

        if (head == null) { // 在表头插入

            head = newNode;

            return;

        }

          Node tmp = head;

          while(tmp.next !=null){

           tmp = tmp.next;

          }

          tmp.next = newNode;     // 在表尾插入

    }

    

    public boolean deleteNode(int index){

          if(index <1 || index> length()){

           return false;

          }

          if(index == 1){

           head = head.next;

           return true;

          }

        

          int i =1;

          Node preNode = head;                          // 记录删除前一个节点

          Node curNode = preNode.next;

          while(curNode != null){

           if(i == index){

            preNode.next = curNode.next;

            return true;

           }

           preNode = curNode;

           curNode = curNode.next;        

           i++;

          }

          return true;    // 一个也没有就返回true

         }

    

         public int length(){      //计算长度

          int length =0;

          Node tmp = head;

          

          while(tmp != null){

           length++;

           tmp = tmp.next;

          }

          return length;

         }

        

           // 对链表进行排序

         public Node orderList(){

          Node nextNode = null;

          int temp =0;

          Node curNode = head;

          

          while(curNode != null){       //  遍历当前节点

           nextNode = curNode.next;

           while(nextNode != null){      // 遍历下一个节点

            if(curNode.data > nextNode.data){

             temp = curNode.data;

             curNode.data = nextNode.data;

             nextNode.data = temp;

            }

            nextNode = nextNode.next;

           }

           curNode = curNode.next;

          }

          

          return head;

         }

        

         public void printList(){

          Node tmp = head;

          while(tmp != null){

           System.out.print(+ tmp.data+"->");

           tmp= tmp.next;

          }

          System.out.println();

         }

        

        // 删除重复数据

         public void deleteDuplecate(Node head){

          Node p = head;

          while(p != null){                     // 外循环

           Node q = p;

           while(q.next != null){                // 内循环

            if(p.data == q.next.data){

             q.next = q.next.next;

            }else

             q = q.next;

           }

           p = p.next;

          }

         }

         public Node findElem(Node head,int k){

          if(k <1 || k >this.length()){

           return null;

          }

          Node p1= head;

          Node p2 = head;

          for(int i =0;i <k-1;i++){

           p1= p1.next;                 // 找出间隔

          }

          while(p1 != null){              // 同时移动

           p1 = p1.next;

           p2 = p2.next;

          }

          return p2;

         }

}

public class List {

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

          Node list = new Node();

          list.addNode(5);

          list.addNode(0);

          list.addNode(4);

          list.addNode(2);

          System.out.println("length=="+list.length());

          System.out.println("before order");

          list.printList();

          list.orderList();

          System.out.println("after order");

          list.printList();

        

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: