1 package com;
2
3 public class Link {
4
5 private class Node{
6 private Object node;
7 private Node next;
8
9 public Node(Object node){
10 this.node = node;
11 }
12 public void addNode(Node newNode){
13 if(this.next == null){
14 this.next = newNode;
15 }else{
16 this.next.addNode(newNode);
17 }
18 }
19 public boolean containsNode(Object data){
20 boolean isHas = false;
21 if(this.node.equals(data)){
22 isHas = true ;
23 }else{
24 if(this.next != null ){
25 isHas = this.next.containsNode(data);
26 }else{
27 isHas = false;
28 }
29 }
30 return isHas;
31 }
32 public Object getNode(){
33 return this.node;
34 }
35 public void toArray(){
36 Link.this.resArr [Link.this.foot ++ ] = this.getNode();
37 if(this.next != null ){
38 this.next.toArray();
39 }
40 }
41 public Object getIndex(int index){
42 if(Link.this.foot ++ == index){
43 return this.node;
44 }else{
45 return this.next.getIndex(index);
46 }
47 }
48 public boolean updateIndex(Object newData,int index){
49 if(Link.this.foot ++ == index){
50 this.node = newData;
51 return true;
52 }else{
53 return this.next.updateIndex(newData, index);
54 }
55 }
56 public boolean removeData(Node node, int index){
57 if(Link.this.foot ++ == index){
58 node.next = node.next.next;
59 Link.this.count --;
60 return true;
61 }else{
62 return this.removeData(node.next,index);
63 }
64 }
65 public boolean removeObject(Node node,Object remObj){
66 if(this.node.equals(remObj)){
67 node.next = this.next;
68 Link.this.count --;
69 return true;
70 }else{
71 return this.next.removeObject(this, remObj);
72 }
73 }
74 }
75 private Node root;//链表的根节点
76 private int count = 0;
77 private Object [] resArr;
78 private int foot =0 ;
79
80 public void add(Object node){
81 if(node == null ){
82 return ;
83 }
84 Node dataNode = new Node(node);
85 if(root == null ){
86 root = dataNode;
87 }else{
88 root.addNode(dataNode);
89 }
90 count ++;
91 }
92 public boolean contains(Object data){
93 if(data == null || this.root == null){
94 return false;
95 }else {
96 return this.root.containsNode(data);
97 }
98 }
99 public boolean isEmpty(){
100 return this.root == null ? true :false;
101 }
102 public int size(){
103 return this.count;
104 }
105 public Object [] toArray(){
106 if(this.count == 0){
107 return null;
108 }
109 this.resArr = new Object[this.count]; //实例化数组长度
110 this.foot = 0;//进行清零处理,需要进行脚标操作
111 this.root.toArray();
112 return this.resArr;
113 }
114 public Object get(int index){
115 if(index >= this.count){
116 return null;
117 }
118 if(this.root != null){
119 this.foot = 0;
120 return this.root.getIndex(index);
121 }
122 return null;
123 }
124 public boolean update(Object obj,int index){
125 if(this.root == null || index > this.count){
126 return false;
127 }
128 this.foot = 0;//初始化 脚标
129 return this.root.updateIndex( obj, index);
130 }
131 public boolean remove(int index){
132 if(this.root == null || index > this.count){
133 return false;
134 }
135 if(index == 0){
136 this.root = this.root.next;
137 return true;
138 }else{
139 this.foot = 1;//初始化 脚标
140 return this.root.removeData(this.root,index);
141 }
142 }
143 public boolean removeObject(Object remData){
144 if(!this.contains(remData)){
145 return false;
146 }
147 if(this.root.node.equals(remData)){
148 this.root = this.root.next;
149 this.count -- ;
150 return true;
151 }else{
152 return this.root.next.removeObject(this.root,remData);
153 }
154 }
155 //------------------------------------------------------------------
156 public static void main(String[] args) {
157 Link lk = new Link();
158
159 lk.add("12232");
160 lk.add("23");
161 lk.add("24");
162 lk.add("25");
163 lk.add("26");
164 System.out.println("----------------修改前-------------------");
165 Object[] array = lk.toArray();
166 for(int i=0;i<array.length;i++){
167 System.out.println(array[i]);
168 }
169
170 lk.removeObject("23");
171 System.out.println("----------------修改后-------------------");
172 Object[] array1 = lk.toArray();
173 for(int i=0;i<array1.length;i++){
174 System.out.println(array1[i]);
175 }
176 }
177 }