Skip to content

Commit 18c20e7

Browse files
committed
2 practices for List(tomorrow continue function changeItemPosition in LinkedList)
1 parent a16c879 commit 18c20e7

File tree

4 files changed

+240
-8
lines changed

4 files changed

+240
-8
lines changed

src/list/ArrayListTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33

44
import java.util.ArrayList;
5-
import java.util.LinkedList;
6-
import java.util.List;
75

86
public class ArrayListTest {
97

src/list/Exercise.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package list;
2+
3+
import org.omg.PortableInterceptor.INACTIVE;
4+
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
5+
6+
import java.lang.invoke.LambdaConversionException;
7+
import java.util.ArrayList;
8+
import java.util.Collection;
9+
import java.util.Iterator;
10+
import java.util.LinkedList;
11+
import java.util.List;
12+
import java.util.TreeMap;
13+
14+
public class Exercise {
15+
16+
public static void main(String[] args) {
17+
List<Integer> l = new ArrayList<>();
18+
l.add(1);
19+
l.add(3);
20+
l.add(4);
21+
l.add(6);
22+
l.add(5443);
23+
l.add(345);
24+
l.add(6535);
25+
l.add(543);
26+
l.add(23);
27+
l.add(9);
28+
l.add(99);
29+
List<Integer> p = new ArrayList<>();
30+
p.add(3);
31+
p.add(4);
32+
p.add(7);
33+
p.add(2);
34+
p.add(6);
35+
p.add(9);
36+
37+
long before = System.currentTimeMillis();
38+
printLots(l, p);
39+
long after = System.currentTimeMillis();
40+
System.out.println("result time: " + (after - before));
41+
42+
/********************************************************/
43+
//2. 通过之调整链(而不是数据)来交换两个相邻的元素,使用
44+
// a. 单链表
45+
// b. 双向链表
46+
SimpleLinkedList simpleLinkedList = new SimpleLinkedList();
47+
simpleLinkedList.add(456);
48+
simpleLinkedList.add(890);
49+
simpleLinkedList.add(2144);
50+
simpleLinkedList.add(111);
51+
simpleLinkedList.add(123);
52+
simpleLinkedList.add(234);
53+
System.out.println(simpleLinkedList.toString());
54+
simpleLinkedList.chengeItemPosition(4);
55+
System.out.println(simpleLinkedList.toString());
56+
57+
}
58+
59+
/**
60+
* 1. 给定一个表L 和 另一个表 P,他们包含以升序排序的整数。操作printLots(L, P) 将打印L 中那些由P所制定的位置上的元素
61+
* 例如:P = 1,3,4,6, 那么L 中位置于1,3,4,6的元素被打印出来, 写出过程printLots().
62+
* 只可使用public型 Collections API 容器操作,求运行时间
63+
*/
64+
public static void printLots(List<Integer> l, List<Integer> p) {
65+
Iterator<Integer> pIt = p.iterator();
66+
List<Integer> result = new ArrayList<>();
67+
while (pIt.hasNext()) {
68+
Integer integer = l.get(pIt.next() - 1);
69+
result.add(integer);
70+
}
71+
System.out.println(result);
72+
}
73+
74+
/**
75+
*
76+
* @param l 双向链表
77+
* @param index 相邻元素的第一个元素的下标
78+
*/
79+
public static void chengePosition(List<Integer> l, int index){
80+
81+
82+
}
83+
84+
85+
}

src/list/LinkedList.java

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package list;
22

3-
import java.util.ArrayList;
43
import java.util.Arrays;
5-
import java.util.Dictionary;
64
import java.util.ListIterator;
75

6+
/**
7+
* 双链表
8+
*/
89
public class LinkedList {
910

1011
public Node first;
@@ -134,6 +135,27 @@ private void addLast(Object obj) {
134135
modCount++;
135136
}
136137

138+
public void chengeItemPosition(int index) {
139+
Node nodePrev = getNode(index);
140+
if (size == 2) {
141+
first = last;
142+
first.next = last.prev;
143+
first.prev = null;
144+
last = nodePrev;
145+
last.next = null;
146+
last.prev = first;
147+
} else if (index == 0) {
148+
Node node = getNode(1);
149+
first.next = getNode(2);
150+
first.prev = node;
151+
node.next = first;
152+
node.prev = null;
153+
first = node;
154+
} else if (index == size - 2) {
155+
} else {
156+
}
157+
}
158+
137159
private void checkIndexGT(int index) {
138160
if (index < 0 || index > size)
139161
throw new IndexOutOfBoundsException();
@@ -225,16 +247,24 @@ public static void main(String[] args) {
225247
System.out.println("size : " + (list1.size()));
226248
System.out.println(list1.toString());*/
227249

228-
java.util.LinkedList list1 = new java.util.LinkedList();
250+
/*java.util.LinkedList list1 = new java.util.LinkedList();
229251
list1.add(1);
230252
list1.add(2);
231-
list1.add(3);
253+
list1.add(3);*/
232254
/*java.util.LinkedList list2 = new java.util.LinkedList();
233255
list2.add(222);
234256
list1.addAll(1, list2);
235257
System.out.println(list1);*/
236-
ListIterator listIterator = list1.listIterator();
237-
listIterator.remove();
258+
/*ListIterator listIterator = list1.listIterator();
259+
listIterator.remove();*/
260+
261+
LinkedList list1 = new LinkedList();
262+
list1.add(1);
263+
list1.add(3);
264+
list1.add(2);
265+
System.out.println(list1.toString());
266+
list1.chengeItemPosition(0);
267+
System.out.println(list1.toString());
238268

239269
}
240270

src/list/SimpleLinkedList.java

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package list;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* 单链表
7+
*/
8+
public class SimpleLinkedList {
9+
10+
private Node first;
11+
private Node last;
12+
private int size;
13+
14+
private class Node {
15+
Node next;
16+
Object item;
17+
18+
Node(Object item, Node next) {
19+
this.next = next;
20+
this.item = item;
21+
}
22+
}
23+
24+
public void add(Object obj) {
25+
Node l = last;
26+
Node newNode = new Node(obj, null);
27+
last = newNode;
28+
if (l == null)
29+
first = newNode;
30+
else
31+
l.next = newNode;
32+
size++;
33+
}
34+
35+
/**
36+
* 改变相邻结点位置
37+
*
38+
* @param index 首结点下标
39+
*/
40+
public void chengeItemPosition(int index) {
41+
Node nodePrev = getNode(index);
42+
Node nodeNext = getNode(index + 1);
43+
if (nodeNext == null || nodePrev == null)
44+
return;
45+
if (size == 2){
46+
first = nodeNext;
47+
first.next = nodePrev;
48+
nodePrev.next = null;
49+
} else if (index == 0) {
50+
first.next = getNode(index + 2);
51+
nodeNext.next = first;
52+
first = nodeNext;
53+
} else if (index == size - 2) {
54+
Node prev = getNode(index - 1);
55+
prev.next = nodeNext;
56+
nodeNext.next = nodePrev;
57+
nodePrev.next = last;
58+
} else {
59+
nodePrev.next = getNode(index + 2);
60+
nodeNext.next = nodePrev;
61+
Node prev = getNode(index - 1);
62+
prev.next = nodeNext;
63+
}
64+
}
65+
66+
private Node getNode(int index) {
67+
checkIndex(index);
68+
Node f = this.first;
69+
if (f == null)
70+
return null;
71+
for (int i = 0; i < index; i++) {
72+
f = f.next;
73+
}
74+
return f;
75+
}
76+
77+
private void checkIndex(int index) {
78+
if (index >= size) {
79+
throw new IndexOutOfBoundsException();
80+
}
81+
}
82+
83+
public Node getFirst() {
84+
return first;
85+
}
86+
87+
public void setFirst(Node first) {
88+
this.first = first;
89+
}
90+
91+
public Node getLast() {
92+
return last;
93+
}
94+
95+
public void setLast(Node last) {
96+
this.last = last;
97+
}
98+
99+
public int getSize() {
100+
return size;
101+
}
102+
103+
public void setSize(int size) {
104+
this.size = size;
105+
}
106+
107+
public String toString() {
108+
Object[] obj = new Object[size];
109+
Node f = first;
110+
for (int i = 0; i < size; i++) {
111+
if (f == null){
112+
break;
113+
}
114+
obj[i] = f.item;
115+
f = f.next;
116+
}
117+
return Arrays.toString(obj);
118+
}
119+
}

0 commit comments

Comments
 (0)