A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WosLovesLife 中级黑马   /  2015-10-27 21:22  /  488 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看对LinkedList的讲解的时候非常晕,于是就自己动手做做,为了加深理解。下面是简单的LinkedList实现,并不完整,只是实现了添加获取和删除。
  1. package LinkedListTest151026;

  2. import java.util.Scanner;

  3. public class Node {
  4.         Node previous;
  5.         Object obj;
  6.         Node next;
  7.        
  8.         public Node() {
  9.                 super();
  10.         }
  11.        
  12.         public Node(Node previous, Object obj, Node next) {
  13.                 super();
  14.                 this.previous = previous;
  15.                 this.obj = obj;
  16.                 this.next = next;
  17.         }
  18.        
  19.         Node first;
  20.         Node last;
  21.        
  22.         int size;
  23.        
  24.         public void add(Object obj){
  25.                 Node n = new Node();
  26.                 if (first == null) {
  27.                         n.previous = null;
  28.                         n.obj = obj;
  29.                         n.next = null;
  30.                        
  31.                         first = n;
  32.                         last = n;
  33.                 }else{
  34.                         n.previous = last;
  35.                         n.obj = obj;
  36.                         n.next = null;
  37.                        
  38.                         last.next = n;
  39.                         last = n;
  40.                 }
  41.                 size++;
  42.         }
  43.        
  44.         public Object get(){
  45.                
  46.                 Node temp = new Node();
  47.                
  48.                 Scanner sc = new Scanner(System.in);
  49.                 int index = sc.nextInt();
  50.                
  51.                 if (first==null) {
  52.                         System.out.println("该链表为空");
  53.                 }else{
  54.                         if (index>=size || index <0) {
  55.                                 System.out.println("索引超出链表大小");
  56.                         }else{
  57.                                 temp = first;
  58.                                 for (int i = 0; i < index; i++) {
  59.                                         temp = first.next;
  60.                                 }
  61.                         }
  62.                 }
  63.                 return temp.obj;       
  64.         }
  65.        
  66. public Object get(int index){
  67.                
  68.                 Node temp = new Node();
  69.                
  70.                 if (first==null) {
  71.                         System.out.println("该链表为空");
  72.                 }else{
  73.                         if (index>=size || index <0) {
  74.                                 System.out.println("索引超出链表大小");
  75.                         }else{
  76.                                 temp = first;
  77.                                 for (int i = 0; i < index; i++) {
  78.                                         temp = temp.next;
  79.                                 }
  80.                         }
  81.                 }
  82.                 return temp.obj;       
  83.         }
  84.        
  85.         public void remove(int index){
  86.                 Node temp = null;
  87.                 if (first == null) {
  88.                        
  89.                 }else{
  90.                         if (index>=size || index <0) {
  91.                                 System.out.println("索引超出链表大小");
  92.                         }else {
  93.                                 temp = first;
  94.                                 if (index == 0) {
  95.                                         first = temp.next;
  96.                                         first.previous=null;
  97.                                         size--;
  98.                                 }else if (index == size-1) {
  99.                                         temp = last;
  100.                                         last = temp.previous;
  101.                                         last.next = null;
  102.                                         size--;
  103.                                 }else{
  104.                                         int a = 0;
  105.                                         for (int i = 0; i <= index; i++) {
  106.                                                 temp = temp.next;
  107.                                                 a ++;
  108.                                                 if (a==index) {
  109.                                                         temp.previous.next = temp.next;
  110.                                                         temp.next.previous = temp.previous;
  111.                                                         size--;
  112.                                                 }
  113.                                         }
  114.                                 }
  115.                         }
  116.                 }
  117.                
  118.                
  119.         }
  120.        
  121.         public void inset(){
  122.                
  123.         }
  124.        
  125. }
复制代码
下面是测试代码
  1. package LinkedListTest151026;

  2. import java.util.Scanner;

  3. public class LinkedTest {
  4.        
  5.        
  6.         public static void main(String[] args) {
  7.                 //创建Node对象
  8.                 Node n = new Node();
  9.                 //像Node链n中添加对象
  10.                 n.add("wos loves life");
  11.                 n.add("mylover");
  12.                 n.add("66");
  13.                 n.add("yanhua");
  14.                 //当前链表内容
  15.                 LinkedTest.showNode(n);
  16.                
  17.                 System.out.println();
  18.                 //输出n,可以看到n是一个地址。
  19.                 System.out.println(n);
  20.                 //测试获取方法,从控制台输入index
  21.                 String s = (String) n.get(0);
  22.                 System.out.println(s);
  23.                 //测试获取方法,既定index2
  24.                 s = (String) n.get(2);
  25.                 System.out.println(s);
  26.                
  27.                
  28.                
  29.                 System.out.println("-------------------------");
  30.                
  31.                 //测试remove
  32.                 System.out.println(n.size);//当前链表大小,4
  33.                 n.remove(1);
  34.                 s=(String)n.get(1);//删除第二个元素
  35.                 System.out.println(s+"\r"+n.size);//当前大小,3
  36.                
  37.                 System.out.println("-------------------------");
  38.                
  39.                 /*调用工具方法遍历链表中的元素
  40.                 (因为我添加的时候都是Stirng,所以强转为了String)
  41.                 如果是多种类型对象,就不能这样遍历。*/
  42.                 LinkedTest.showNode(n);
  43.                
  44.                 System.out.println("-------------------------");
  45.                
  46.                 //测试删除第一个,当前第一个是wos loves life
  47.                 n.remove(0);
  48.                 LinkedTest.showNode(n);
  49.                 //测试删除最后一个,当前最后一个是yanhua
  50.                 n.remove(1);
  51.                 LinkedTest.showNode(n);
  52.                
  53.                
  54.         }
  55.        
  56.        
  57.         public static void showNode(Node n){
  58.                 Node temp = n.first;
  59.                 String s;
  60.                 s =(String)temp.obj;
  61.                 System.out.println(s);
  62.                 for (int i = 1; i <n.size ; i++) {
  63.                        
  64.                         temp = temp.next;
  65.                         s = (String)temp.obj;
  66.                         System.out.println(s);
  67.                 }
  68.                 System.out.println("-------------------------");
  69.         }
  70.        
  71. }
复制代码




1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马