Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ce5c5d0

Browse files
Create 707设计链表java代码的修改
代码随想录网址上链表中的力扣707设计链表中的java代码:1,对于单链表的操作,删除元素的for循环跳出条件有误,进行了修改;2,对于双向链表,进行了插入头,尾元素和插入元素的统一操作。自己在原作者基础上写了一份设计链表的java代码。
1 parent 90411f1 commit ce5c5d0

File tree

1 file changed

+187
-0
lines changed

1 file changed

+187
-0
lines changed

‎707设计链表java代码的修改‎

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
//原来的代码随想录707设计链表的java代码中单链表的设计中有错误,修正后并对双链表进行了简化和更正,下面是我的java代码
2+
3+
//单链表
4+
class ListNode{
5+
int val;
6+
ListNode next;
7+
ListNode() {};
8+
ListNode(int val){
9+
this.val = val;
10+
}
11+
}
12+
13+
14+
class MyLinkedList {
15+
16+
//记录链表中元素的数量
17+
int size;
18+
//记录链表的虚拟头结点
19+
ListNode head;
20+
21+
public MyLinkedList() {
22+
//初始化操作
23+
this.size = 0;
24+
this.head = new ListNode(0);
25+
this.head.next = null;
26+
}
27+
28+
public int get(int index) {
29+
//判断index是否有效
30+
if(index<0 || index>=size){
31+
return -1;
32+
}
33+
ListNode cur = this.head;
34+
//index 是可以取到的,因为有虚拟头结点
35+
for(int i=0; i<= index; i++){
36+
cur = cur.next;
37+
}
38+
return cur.val;
39+
}
40+
41+
public void addAtHead(int val) {
42+
//等价于在第0个元素前添加
43+
addAtIndex(0,val);
44+
}
45+
46+
public void addAtTail(int val) {
47+
//等价于在最后一个元素(null)前添加
48+
addAtIndex(size,val);
49+
}
50+
51+
public void addAtIndex(int index, int val) {
52+
//index大于链表长度
53+
if(index>size){
54+
return;
55+
}
56+
//index小于0
57+
if(index<0){
58+
index = 0;
59+
}
60+
size++;
61+
//找到前驱
62+
ListNode pre = this.head;
63+
for(int i=0; i<index; i++){
64+
pre = pre.next;
65+
}
66+
//新建结点
67+
ListNode newNode = new ListNode(val);
68+
newNode.next = pre.next;
69+
pre.next = newNode;
70+
}
71+
72+
public void deleteAtIndex(int index) {
73+
//判断索引是否有效
74+
if(index<0 || index>=size){
75+
return;
76+
}
77+
//删除操作
78+
size--;
79+
ListNode pre = this.head;
80+
for(int i=0; i<index; i++){
81+
pre = pre.next;
82+
}
83+
pre.next = pre.next.next;
84+
85+
}
86+
}
87+
88+
//-------------------------------------------------------------------------------------------------------------------------------
89+
//双向链表
90+
class ListNode{
91+
int val;
92+
ListNode next,prev;
93+
ListNode() {};
94+
ListNode(int val){
95+
this.val = val;
96+
}
97+
}
98+
99+
100+
class MyLinkedList {
101+
102+
//记录链表中元素的数量
103+
int size;
104+
//记录链表的虚拟头结点和尾结点
105+
ListNode head,tail;
106+
107+
public MyLinkedList() {
108+
//初始化操作
109+
this.size = 0;
110+
this.head = new ListNode(0);
111+
this.tail = new ListNode(0);
112+
//这一步非常关键,否则在加入头结点的操作中会出现null.next的错误!!!
113+
head.next=tail;
114+
tail.prev=head;
115+
}
116+
117+
public int get(int index) {
118+
//判断index是否有效
119+
if(index<0 || index>=size){
120+
return -1;
121+
}
122+
ListNode cur = this.head;
123+
//判断是哪一边遍历时间更短
124+
if(index >= size / 2){
125+
//tail开始
126+
cur = tail;
127+
for(int i=0; i< size-index; i++){
128+
cur = cur.prev;
129+
}
130+
}else{
131+
for(int i=0; i<= index; i++){
132+
cur = cur.next;
133+
}
134+
}
135+
return cur.val;
136+
}
137+
138+
public void addAtHead(int val) {
139+
//等价于在第0个元素前添加
140+
addAtIndex(0,val);
141+
}
142+
143+
public void addAtTail(int val) {
144+
//等价于在最后一个元素(null)前添加
145+
addAtIndex(size,val);
146+
}
147+
148+
public void addAtIndex(int index, int val) {
149+
//index大于链表长度
150+
if(index>size){
151+
return;
152+
}
153+
//index小于0
154+
if(index<0){
155+
index = 0;
156+
}
157+
size++;
158+
//找到前驱
159+
ListNode pre = this.head;
160+
for(int i=0; i<index; i++){
161+
pre = pre.next;
162+
}
163+
//新建结点
164+
ListNode newNode = new ListNode(val);
165+
newNode.next = pre.next;
166+
pre.next.prev = newNode;
167+
newNode.prev = pre;
168+
pre.next = newNode;
169+
170+
}
171+
172+
public void deleteAtIndex(int index) {
173+
//判断索引是否有效
174+
if(index<0 || index>=size){
175+
return;
176+
}
177+
//删除操作
178+
size--;
179+
ListNode pre = this.head;
180+
for(int i=0; i<index; i++){
181+
pre = pre.next;
182+
}
183+
pre.next.next.prev = pre;
184+
pre.next = pre.next.next;
185+
}
186+
}
187+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /