程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java完成單鏈表、雙向鏈表

java完成單鏈表、雙向鏈表

編輯:關於JAVA

java完成單鏈表、雙向鏈表。本站提示廣大學習愛好者:(java完成單鏈表、雙向鏈表)文章只能為提供參考,不一定能成為您想要的結果。以下是java完成單鏈表、雙向鏈表正文


本文實例為年夜家分享了java完成單鏈表、雙向鏈表的相干代碼,供年夜家參考,詳細內容以下

java完成單鏈表:

package code;

class Node
{
 Node next;
 int data;
 public Node(int data)
 {
  this.data=data;
 }
 
}
class LinkList
{
 Node first;
 //頭部
 public LinkList()
 {
  this.first=null;
 }
 public void addNode(Node no)
 {
  no.next=first;
  first=no;//在頭部添加
 }
 public void delectNode()
 {
  Node n=first.next;
  first=null;
  first=n;//在頭部刪除
 }
 //刪除指定地位
 public int Number()
 {
  int count=1;
  //檢查有若干元素
  Node nd=first;
  while(nd.next!=null)
  {
   nd=nd.next;
   count++;
  }
  return count;
 }
 public void delectExact(int n)
 {
  //刪除指定地位
  if(n>1)
  {
   int count=1;
   Node de=first;
   while(count<n-1)
   {
    de=de.next;
    count++;
    
   }
   de.next=de.next.next;
  }
  else
   first=first.next;
  
 }
 public void addExact(int n,Node nd)
 {
  if(n>1)//添加指定地位
  {
   int count=1;
   Node de=first;
   while(count<n-1)
   {
    de=de.next;
    count++;
    
   }
   nd.next=de.next;
   de.next=nd;

  }
  else
   first=first.next;
 }
 public int findNode(int n)
 {
  int count=1;//查找一個數對應的地位
  Node de=first;
  while(de.data!=n)
  {
   de=de.next;
   count++;
   if(de==null)
   {
    return -1;
   }
  }
  return count;
 }
 public void print()
 {
  Node no=first;//打印一切
  while(no!=null)
  {
   System.out.println(no.data);
   no=no.next;
  }
 }
}
public class TextNode
{
 public static void main(String[] args)
 {
  LinkList ll=new LinkList();
  ll.addNode(new Node(12));
  ll.addNode(new Node(15));
  ll.addNode(new Node(18));
  ll.addNode(new Node(19));
  ll.addNode(new Node(20));
  /*System.out.println(ll.first.data);

  ll.delectNode();
  System.out.println(ll.first.data);*/
  System.out.println(ll.Number());
  ll.delectExact(3);
  ll.addExact(3, new Node(100));
  System.out.println(ll.Number());
//  ll.print();
  System.out.println(ll.findNode(112));
  
 }
}

java完成雙向鏈表:

public class DoubleLink
{
 public static void main(String[]args)
 {
  Node2 no=new Node2(5);
  no.addLeft(new Node2(6));
  no.addRight(new Node2(7));
  /*no.print();
  no.print2();*/
  no.addExact2(1, new Node2(8));
  no.print();
  System.out.println("--------------");
  no.print2();
 }
}
class Node2
{
 public Node2 first;
 public Node2 end;
 public Node2 left;
 public Node2 right;
 int data=0;
 public Node2(int n)
 {
  
  first=this;
  end=this;
  
  first.data=n;
 }
 //從頭部添加
 public void addLeft(Node2 before)
 {
  first.left=before;
  before.right=first;
  first=before;
 }
 //從尾部添加
 public void addRight(Node2 after)
 {
  end.right=after;
  after.left=end;
  end=after;
 }
 //拔出負數(第三聲)的第幾個
 public void addExact(int n,Node2 no)
 {
  int count=0;
  if(n==0)
  {
   addLeft(no);
  }
  else
  { 
   Node2 f=first;
   while(true)
   {
    f=f.right;
    count++;
    if(count==n)
    {
     //此處為四個指針的指向的變更
     no.left=f.left;
     f.left.right=no;
 //    first.left=no;
     no.right=f;
     f.left=no;
     break;
    }
 
   }
  }
 }
 //拔出倒數的第幾個
 public void addExact2(int n,Node2 no)
 {
  int count=0;
  if(n==0)
  {
   addRight(no);
  }
  else
  {
   Node2 f=end;
   while(true)
   {
    f=f.left;
    count++;
    if(count==n)
    {
     
     no.left=f;
     no.right=f.right;
     f.right.left=no;
     f.right=no;
     break;
     
    }
   }
  }
 }
 //正序遍歷
 public void print()
 {
  System.out.println(first.data);
  while(first.right!=null)
  {
   System.out.println(first.right.data);
   first=first.right;
  }
//  System.out.println(end.data);
 }
 //倒序遍歷
 public void print2()
 {
  System.out.println(end.data);
  while(end.left!=null)
  {
   System.out.println(end.left.data);
   end=end.left;
  }
 }
 

}
/*值得留意的是,每次拔出一個新的對象的時刻,須要留意指針指向的轉變。
起首是這個新的對象雙方的指向(左和右),其次是時右邊的對象向右的指向
和左邊對象向左的指向。
這四個指針的指向必需准確,不然能夠招致正序或許倒序遍歷沒法完成。
*/
/*比較單鏈表,單鏈表只能從一個偏向遍歷,由於只要一個頭,而雙向鏈表,有頭和尾,可以從
 * 頭遍歷,也能夠從尾遍歷,並且個中一個對象由於有兩個偏向的指針,所以他可以取得右邊的
 * 對象也能夠取得左邊的對象。
 * 然則單鏈表的話,由於只要一個偏向,所以只能向左或右。添加對象的時刻,雙向也能夠從頭添加,也能夠從尾添加。
 * 假如單鏈表要完成兩個偏向添加比擬可貴,或許說不可,由於他只要向左或向右的一個偏向的指針
 * 而雙向鏈表每一個對象都有兩個偏向的指針沒如許更靈巧,然則這異樣出缺點,由於如許的話每一個對象
 * 都邑包括兩個指針,這異樣內存會消費更多。
 * 
 * */

以上就是本文的全體內容,願望對年夜家進修java法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved