Java實(shí)現(xiàn)鏈表主要依靠引用傳遞,引用可以理解為地址,鏈表的遍歷多使用遞歸,這里我存在一個(gè)疑問同一個(gè)類的不同對(duì)象的的相同方法的方法內(nèi)調(diào)用算不算遞歸.
這里我寫的是單向鏈表;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package com.example.java; public class MyLink { public static void main(String [] args){ Link l= new Link(); mytype[] la; mytype dsome= new mytype( "韓敏" , "dsome" , 21 ); mytype shao= new mytype( "邵曉" , "john" , 45 ); mytype hua= new mytype( "華曉風(fēng)" , "jam" , 46 ); mytype duo= new mytype( "余小風(fēng)" , "duo" , 1000 ); mytype wang= new mytype( "王秋" , "jack" , 21 ); mytype shi= new mytype( "韓寒" , "bob" , 3000 ); mytype yu= new mytype( "于冬" , "keven" , 30 ); l.add(dsome); //測(cè)試增加節(jié)點(diǎn) l.add(shao); l.add(hua); l.add(wang); l.add(shi); l.add(duo); l.add(yu); System.out.println( "鏈表長(zhǎng)度:" +l.length()); //鏈表長(zhǎng)度 la=l.toArray(); for ( int i= 0 ;i<la.length;i++){ System.out.println(la[i].getInfo()); } System.out.println( "是否包含多余:" +l.contains(duo)+ "\n" ); System.out.println( "刪除多余后\n" ); l.remove(duo); la=l.toArray(); for ( int i= 0 ;i<la.length;i++){ //轉(zhuǎn)化為數(shù)組之后輸出 System.out.println(la[i].getInfo()); } System.out.println( "\n利用索引方法輸出全部數(shù)據(jù)" ); for ( int i= 0 ;i<l.length();i++){ System.out.println(l.get(i).getInfo()); } System.out.println( "是否包含多余:" +l.contains(duo)+ "\n" ); l.clean(); System.out.println( "執(zhí)行清空操作后鏈表長(zhǎng)度: " +l.length()+ "\t是否為空鏈表:" +l.isEmpty()); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package com.example.java; public class Link { private class Node{ //內(nèi)部類 private Node next; private mytype data; public Node(mytype data){ this .data=data; } public void addNode(Node newNode){ //增加節(jié)點(diǎn) if ( this .next== null ){ this .next=newNode; } else { this .next.addNode(newNode); } } public mytype getNode( int index){ //按照角標(biāo)返回?cái)?shù)據(jù) if (index==Link. this .foot++){ return this .data; } else { return this .next.getNode(index); } } public boolean iscontain(mytype data){ //判斷是否含有該數(shù)據(jù) if ( this .data.equals(data)){ return true ; } else { if ( this .next!= null ){ return this .next.iscontain(data); } else { return false ; } } } public void removeNode(Node previous,mytype data){ //刪除節(jié)點(diǎn) if ( this .data.equals(data)){ previous.next= this .next; } else { this .next.removeNode( this ,data); } } public void toArrayNode(){ //轉(zhuǎn)化數(shù)組 Link. this .Larray[Link. this .foot ++]= this .data; if ( this .next!= null ){ this .next.toArrayNode(); } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
//內(nèi)部類定義完畢 private Node root; private int count= 0 ; private int foot; private mytype [] Larray; public void add(mytype data){ //增加節(jié)點(diǎn) if (data== null ){ System.out.print( "增加數(shù)據(jù)失敗,數(shù)據(jù)為空" ); //測(cè)試用 return ; } Node newNode= new Node(data); if ( this .root== null ){ this .root=newNode; this .count++; } else { this .root.addNode(newNode); this .count++; } } public int length(){ //鏈表長(zhǎng)度 return this .count; } public boolean isEmpty(){ //是否為空鏈表 if ( this .count== 0 ) return true ; else return false ; } public void clean(){ //清空鏈表 this .root= null ; this .count= 0 ; } public mytype get( int index){ //索引返回節(jié)點(diǎn)所存的數(shù)據(jù) if (index>= this .count||index< 0 ){ System.out.print( "越界錯(cuò)誤" ); //測(cè)試用 return null ; } else { this .foot= 0 ; return this .root.getNode(index); } } public boolean contains(mytype data){ //判斷鏈表數(shù)據(jù)是否含data if (data== null ) return false ; return this .root.iscontain(data); } public void remove(mytype data){ //刪除指定數(shù)據(jù)節(jié)點(diǎn) if ( this .contains(data)){ if ( this .root.data.equals(data)){ this .root= this .root.next; this .count--; } else { this .count--; this .root.next.removeNode(root,data); } } else { System.out.print( "刪除錯(cuò)誤" ); //測(cè)試用 } } public mytype[] toArray(){ //把鏈表轉(zhuǎn)化成對(duì)象數(shù)組 if ( this .count== 0 ){ return null ; } this .foot= 0 ; this .Larray= new mytype [ this .count]; this .root.toArrayNode(); return this .Larray; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package com.example.java; public class mytype { private String name; private String people; private int age; public mytype(String name,String people, int age){ //鏈表中的數(shù)據(jù)(可自定義) this .name=name; this .people=people; this .age=age; } public boolean equals(mytype data){ //判斷數(shù)據(jù)是否相同 if ( this ==data){ return true ; } if (data== null ){ return false ; } if ( this .name.equals(data.name)&& this .people.equals(data.people)&& this .age==data.age){ return true ; } else { return false ; } } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getPeople() { return people; } public void setPeople(String people) { this .people = people; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } public String getInfo(){ return "名字 :" + this .name+ "\n" + "人物 :" + this .people+ "\n" + "年齡 :" + this .age; } } |
測(cè)試效果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
鏈表長(zhǎng)度:7 名字 :韓敏 人物 :dsome 年齡 :21 名字 :邵曉 人物 :john 年齡 :45 名字 :華曉風(fēng) 人物 :jam 年齡 :46 名字 :王秋 人物 :jack 年齡 :21 名字 :韓寒 人物 :bob 年齡 :3000 名字 :余小風(fēng) 人物 :duo 年齡 :1000 名字 :于冬 人物 :keven 年齡 :30 是否包含多余:true 刪除多余后 名字 :韓敏 人物 :dsome 年齡 :21 名字 :邵曉 人物 :john 年齡 :45 名字 :華曉風(fēng) 人物 :jam 年齡 :46 名字 :王秋 人物 :jack 年齡 :21 名字 :韓寒 人物 :bob 年齡 :3000 名字 :于冬 人物 :keven 年齡 :30 利用索引方法輸出全部數(shù)據(jù) 名字 :韓敏 人物 :dsome 年齡 :21 名字 :邵曉 人物 :john 年齡 :45 名字 :華曉風(fēng) 人物 :jam 年齡 :46 名字 :王秋 人物 :jack 年齡 :21 名字 :韓寒 人物 :bob 年齡 :3000 名字 :于冬 人物 :keven 年齡 :30 是否包含多余:false 執(zhí)行清空操作后鏈表長(zhǎng)度: 0 是否為空鏈表:true |
原文鏈接:http://blog.csdn.net/google_huchun/article/details/52824024