LeetCode203 707链表
- 双向链表的使用 - 增加虚拟头节点方便操作
This commit is contained in:
parent
8ad2f18126
commit
c998f0351e
166
src/main/java/cn/whaifree/leetCode/middle/LeetCode707_2.java
Normal file
166
src/main/java/cn/whaifree/leetCode/middle/LeetCode707_2.java
Normal file
@ -0,0 +1,166 @@
|
||||
package cn.whaifree.leetCode.middle;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class LeetCode707_2 {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
MyLinkedList myLinkedList = new MyLinkedList();
|
||||
myLinkedList.addAtHead(1);
|
||||
myLinkedList.addAtHead(2);
|
||||
myLinkedList.addAtHead(3);
|
||||
myLinkedList.addAtHead(4);
|
||||
myLinkedList.addAtHead(5);
|
||||
// myLinkedList.addAtIndex(4, 99);
|
||||
System.out.println(myLinkedList.get(0));
|
||||
System.out.println(myLinkedList.get(1));
|
||||
System.out.println(myLinkedList.get(2));
|
||||
System.out.println(myLinkedList.get(3));
|
||||
System.out.println(myLinkedList.get(4));
|
||||
System.out.println(myLinkedList.get(-1));
|
||||
|
||||
// myLinkedList.deleteAtIndex(4);
|
||||
}
|
||||
|
||||
class ListNode {
|
||||
ListNode pre;
|
||||
ListNode next;
|
||||
int val;
|
||||
|
||||
public ListNode(ListNode pre, ListNode next, int val) {
|
||||
this.pre = pre;
|
||||
this.next = next;
|
||||
this.val = val;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class MyLinkedList {
|
||||
ListNode head;
|
||||
ListNode tail;
|
||||
int size;
|
||||
|
||||
public MyLinkedList() {
|
||||
head = new ListNode(null, null, 0);
|
||||
tail = new ListNode(head, null, 0);
|
||||
head.next = tail;
|
||||
size = 0;
|
||||
}
|
||||
|
||||
public int get(int index) {
|
||||
if (index >= size || index < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (index <= size / 2) {
|
||||
ListNode trueIndex = head.next;
|
||||
for (int i = 0; i < index; i++) {
|
||||
trueIndex = trueIndex.next;
|
||||
}
|
||||
return trueIndex.val;
|
||||
} else {
|
||||
ListNode trueIndex = tail.pre;
|
||||
for (int i = size - 1; i > index; i--) {
|
||||
trueIndex = trueIndex.pre;
|
||||
}
|
||||
return trueIndex.val;
|
||||
}
|
||||
}
|
||||
|
||||
public void addAtHead(int val) {
|
||||
ListNode listNode = new ListNode(head, head.next, val);
|
||||
head.next.pre = listNode;
|
||||
head.next = listNode;
|
||||
size++;
|
||||
}
|
||||
|
||||
public void addAtTail(int val) {
|
||||
ListNode listNode = new ListNode(tail.pre, tail, val);
|
||||
tail.pre.next = listNode;
|
||||
tail.pre = listNode;
|
||||
size++;
|
||||
}
|
||||
|
||||
public void addAtIndex(int index, int val) {
|
||||
if (index > size) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (index == 0) {
|
||||
addAtHead(val);
|
||||
return;
|
||||
}
|
||||
if (index == size) {
|
||||
addAtTail(val);
|
||||
return;
|
||||
}
|
||||
|
||||
if (index <= size / 2) {
|
||||
ListNode trueIndex = head.next;
|
||||
for (int i = 0; i < index; i++) {
|
||||
trueIndex = trueIndex.next;
|
||||
}
|
||||
ListNode listNode = new ListNode(trueIndex.pre, trueIndex, val);
|
||||
trueIndex.pre.next = listNode;
|
||||
trueIndex.pre = listNode;
|
||||
} else {
|
||||
ListNode trueIndex = tail.pre;
|
||||
for (int i = size - 1; i > index; i--) {
|
||||
trueIndex = trueIndex.pre;
|
||||
}
|
||||
ListNode listNode = new ListNode(trueIndex.pre, trueIndex, val);
|
||||
trueIndex.pre.next = listNode;
|
||||
trueIndex.pre = listNode;
|
||||
}
|
||||
size++;
|
||||
}
|
||||
|
||||
public void deleteAtIndex(int index) {
|
||||
if (index >= size || index < 0) {
|
||||
return;
|
||||
}
|
||||
if (index == 0) {
|
||||
head.next.next.pre = head;
|
||||
head.next = head.next.next;
|
||||
size--;
|
||||
return;
|
||||
}
|
||||
if (index == size - 1) {
|
||||
tail.pre.pre.next = tail;
|
||||
tail.pre = tail.pre.pre;
|
||||
size--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (index < size / 2) {
|
||||
ListNode trueIndex = head.next;
|
||||
for (int i = 0; i < index; i++) {
|
||||
trueIndex = trueIndex.next;
|
||||
}
|
||||
trueIndex.pre.next = trueIndex.next;
|
||||
trueIndex.next.pre = trueIndex.pre;
|
||||
|
||||
} else {
|
||||
ListNode trueIndex = tail.pre;
|
||||
for (int i = size - 1; i > index; i--) {
|
||||
trueIndex = trueIndex.pre;
|
||||
}
|
||||
trueIndex.next.pre = trueIndex.pre;
|
||||
trueIndex.pre.next = trueIndex.next;
|
||||
}
|
||||
size--;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Your MyLinkedList object will be instantiated and called as such:
|
||||
* MyLinkedList obj = new MyLinkedList();
|
||||
* int param_1 = obj.get(index);
|
||||
* obj.addAtHead(val);
|
||||
* obj.addAtTail(val);
|
||||
* obj.addAtIndex(index,val);
|
||||
* obj.deleteAtIndex(index);
|
||||
*/
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user