1
+ import java .util .*;
2
+
3
+ public class MyLinkedList implements List {
4
+
5
+ private Node first ;
6
+ private Node last ;
7
+ private int size = 0 ;
8
+ public void Myadd (Object o ){
9
+ final Node l = last ;
10
+ final Node newNode = new Node (l ,o ,null );
11
+ last = newNode ;
12
+ if (l == null )
13
+ first = newNode ;
14
+ else
15
+ l .next = newNode ;
16
+ size ++;
17
+ }
18
+ public void Myadd (int index , Object o ){
19
+ checkPosition (index );
20
+ if (index == size ){
21
+ Myadd (o );
22
+ }
23
+ else {
24
+ final Node PreNode =GetNodeByIndex (index ).prev ;
25
+ final Node newNode = new Node (PreNode ,o ,GetNodeByIndex (index ));
26
+ PreNode .next =newNode ;
27
+ if (PreNode == null )
28
+ first = newNode ; //ΪʲôҪ¸¶¸øÊ×Ö¸Õ룿
29
+ else
30
+ PreNode .next = newNode ;
31
+ size ++;
32
+ }
33
+ }
34
+ public Object get (int index ){
35
+ checkPosition (index );
36
+ return GetNodeByIndex (index );
37
+ }
38
+ public void remove (int index ){
39
+ Node node = GetNodeByIndex (index );
40
+ node .prev .next = node .next ;
41
+ node .next .prev = node .prev ;
42
+ node = null ;
43
+ size --;
44
+ }
45
+
46
+ public int size (){
47
+ return size ;
48
+ }
49
+
50
+ public void addFirst (Object o ){
51
+ final Node FirstNode = first ;
52
+ final Node newNode = new Node (null ,o ,first );
53
+ first = newNode ;
54
+ if (FirstNode == null )
55
+ last = newNode ;
56
+ else
57
+ first .prev = newNode ;
58
+ size ++;
59
+
60
+ }
61
+ public void addLast (Object o ){
62
+ final Node LastNode = last ;
63
+ final Node newNode = new Node (last ,o ,null );
64
+ last = newNode ;
65
+ if (last == null )
66
+ first = newNode ;
67
+ else
68
+ last .next = newNode ;
69
+ size ++;
70
+ }
71
+ public void removeFirst (){
72
+ final Node f = first ;
73
+ if (f == null )
74
+ throw new NoSuchElementException ();
75
+ first = f .next ;
76
+ first = null ;
77
+ size --;
78
+ }
79
+ public void removeLast (){
80
+ final Node f = last ;
81
+ if (f == null )
82
+ throw new NoSuchElementException ();
83
+ last = last .prev ;
84
+ last = null ;
85
+ size --;
86
+ }
87
+ public Iterator iterator (){
88
+ return null ;
89
+ }
90
+
91
+
92
+ private static class Node {
93
+ Object item ;
94
+ Node next ;
95
+ Node prev ;
96
+ Node (Node prev ,Object element ,Node next ){
97
+ this .item = element ;
98
+ this .next = next ;
99
+ this .prev = prev ;
100
+ }
101
+ }
102
+
103
+ private Node GetNodeByIndex (int index ){
104
+ if (index > size /2 )
105
+ {
106
+ Node Temp = first ;
107
+ for (int i = 0 ; i < index ;i ++)
108
+ Temp = Temp .next ; //
109
+ return Temp ;
110
+ }
111
+ else
112
+ {
113
+ Node Temp = last ;
114
+ for (int i = size -1 ; i > index ; i --)
115
+ Temp = Temp .prev ;
116
+ return Temp ;
117
+ }
118
+ }
119
+
120
+ private void checkPosition (int index ){
121
+ if (index < 0 || index > size )
122
+ throw new IndexOutOfBoundsException ("index:" + index +"is llegal" );
123
+ }
124
+ }
0 commit comments