Skip to content

Commit d9e9ba4

Browse files
committed
完成单向链表
1 parent 4352873 commit d9e9ba4

File tree

2 files changed

+102
-11
lines changed

2 files changed

+102
-11
lines changed

group20/286166752/src/wiki/liven/code/dataStructures/ArrayList.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class ArrayList implements List{
99
* 列表中元素的个数
1010
*/
1111
private int size = 0;
12-
private int maxSize = 100;
12+
private int maxSize = 10;
1313
/**
1414
* 初始数组
1515
*/
@@ -27,7 +27,9 @@ public class ArrayList implements List{
2727
*/
2828
@Override
2929
public void add(int index, Object o) {
30-
if (size>=maxSize){
30+
if(index<0||index>size-1)
31+
throw new IndexOutOfBoundsException("数组下标越界异常。");
32+
if (size==maxSize){
3133
Object[] targt = new Object[++maxSize];
3234
System.arraycopy(elementData,0,targt,0,maxSize);
3335
for (int j = targt.length;j>=index;j--){
@@ -50,7 +52,7 @@ public void add(int index, Object o) {
5052
*/
5153
@Override
5254
public void add(Object o) {
53-
if (size>=maxSize){
55+
if (size==maxSize){
5456
Object[] targt = new Object[++maxSize];
5557
System.arraycopy(elementData,0,targt,0,maxSize);
5658
targt[maxSize-1] = o;
@@ -63,15 +65,21 @@ public void add(Object o) {
6365

6466
@Override
6567
public Object get(int index) {
66-
return elementData[index];
68+
if(index<0||index>size-1)
69+
throw new IndexOutOfBoundsException("数组下标越界异常");
70+
Object o= elementData[index];
71+
return o;
6772
}
6873

6974
@Override
7075
public Object remove(int index) {
76+
if (index<0||index>size-1)
77+
throw new IndexOutOfBoundsException("数组下表越界异常");
7178
Object temp = elementData[index];
7279
for (int i = index;i>size-1;i++){
7380
elementData[i] = elementData[i+1];
7481
}
82+
size--;
7583
return temp;
7684
}
7785

group20/286166752/src/wiki/liven/code/dataStructures/LinkedList.java

Lines changed: 90 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,119 @@
55
*/
66
public class LinkedList implements List{
77

8-
private Node head;
8+
private Node head;//链表的头节点
9+
private Node tail;//链接的尾节点
10+
private int size;//定义了链表中的元素的个数
911

12+
/**
13+
* 定义了NODE节点的数据结构
14+
*/
1015
private static class Node{
1116
Object data;
1217
Node next;
13-
}
18+
private Node(){
1419

20+
}
21+
private Node(Object o,Node node){
22+
this.data = o;
23+
this.next = node;
24+
}
25+
}
1526

27+
/**
28+
* 在指定的索引写入新的节点
29+
* 1.找到给位置上的节点node0
30+
* 2.修改node0的next指向新的节点node
31+
* 3.新节点node指向原先node0的后继节点node1
32+
* 4.长度++
33+
* 5.完结
34+
* @param index 索引 从0开始
35+
* @param o
36+
*/
1637
@Override
1738
public void add(int index, Object o) {
18-
39+
if (index<0||index>size-1)
40+
throw new IndexOutOfBoundsException("单链表越界异常。");
41+
Node node = new Node();
42+
node.data = o;
43+
Node nodeIndex = findNodeByIndex(index);
44+
if(node==null)
45+
throw new NullPointerException("空指针异常。");
46+
Node temp = nodeIndex.next;
47+
nodeIndex.next = node;
48+
node.next = temp;
49+
size++;
50+
}
51+
52+
/**
53+
* 根据索引号查询节点
54+
* @param index 索引
55+
* @return
56+
*/
57+
private Node findNodeByIndex(int index) {
58+
if (index<0||index>size-1)
59+
throw new IndexOutOfBoundsException("单链表越界异常。");
60+
Node current = head;
61+
if (1<=index&&index<=size-1){//索引检查
62+
for (int i = 0;i>=size-1&&current!=null;i++,current = current.next)
63+
if (i==index){
64+
return current;
65+
}
66+
}
67+
return null;
1968
}
2069

2170
@Override
2271
public void add(Object o) {
23-
72+
Node node = new Node();
73+
node.data = o;
74+
if(head==null){
75+
head = node;
76+
node.next = tail;
77+
size++;
78+
}else{
79+
Node temp = tail;
80+
node.next = temp;
81+
temp.next = node;
82+
size++;
83+
}
2484
}
2585

2686
@Override
2787
public Object get(int index) {
28-
return null;
88+
if(index<0||index>size-1)
89+
throw new IndexOutOfBoundsException("单链表越界。");
90+
Node node = findNodeByIndex(index);
91+
if(node==null)
92+
throw new NullPointerException("空指针异常。");
93+
return node.data;
2994
}
3095

96+
/**
97+
* 删除指定索引的元素
98+
* @param index
99+
* @return
100+
*/
31101
@Override
32102
public Object remove(int index) {
33-
return null;
103+
if(index<0||index>size-1)
104+
throw new IndexOutOfBoundsException("单链表越界。");
105+
Node node = findNodeByIndex(index);
106+
if(node==null)
107+
throw new NullPointerException("空指针异常。");
108+
Node prvNode = findNodeByIndex(index-1);
109+
if(prvNode==null)
110+
throw new NullPointerException("空指针异常。");
111+
Node nextNode = node.next;
112+
node.next = null;
113+
prvNode.next = nextNode;
114+
size--;
115+
return node.data;
116+
34117
}
35118

36119
@Override
37120
public int size() {
38-
return 0;
121+
return size;
39122
}
40123
}

0 commit comments

Comments
 (0)