203.移除链表元素
leetcode题目链接:https://leetcode.cn/problems/remove-linked-list-elements
leetcode AC记录:
代码如下:
public ListNode removeElements(ListNode head, int val) {
ListNode res = new ListNode();
res.next = head;
ListNode temp = res;
while(temp.next != null) {
if(temp.next.val == val) {
temp.next = temp.next.next;
} else {
temp = temp.next;
}
}
return res.next;
}
707.设计链表
leetcode题目链接:https://leetcode.cn/problems/design-linked-list
leetcode AC记录:
代码如下:
class MyLinkedList {
public static class ListNode {
private int val;
private ListNode next;
private ListNode pre;
public ListNode(int val, ListNode next, ListNode pre){
this.val = val;
this.next = next;
this.pre = pre;
}
}
private ListNode head;
private ListNode tail;
private int size;
public MyLinkedList() {
}
public int get(int index) {
if(index < 0 || index >= size) {
return -1;
}
int half = size / 2;
ListNode temp = null;
if(index <= half) {
temp = head;
while(index-- > 0) {
temp = temp.next;
}
} else {
temp = tail;
while(++index < size) {
temp = temp.pre;
}
}
ListNode print1 = head;
while(print1 != null) {
System.out.print(print1.val + " ");
print1 = print1.next;
}
System.out.println();
return temp == null ? -1 : temp.val;
}
public void addAtHead(int val) {
ListNode node = new ListNode(val, null, null);
if(head == null) {
head = node;
tail = node;
} else {
node.next = head;
head.pre = node;
head = node;
}
size++;
}
public void addAtTail(int val) {
ListNode node = new ListNode(val, null, tail);
if(tail == null) {
head = node;
tail = node;
} else {
tail.next = node;
tail = node;
}
size++;
}
public void addAtIndex(int index, int val) {
int half = size >> 1;
if(index > size) {
return;
}
if(index <= 0) {
this.addAtHead(val);
return;
}
else if(index == size) {
this.addAtTail(val);
return;
}
ListNode originNode = null;
ListNode node = new ListNode(val, null, null);
if(index <= half) {
ListNode temp = head;
while(index-- > 0) {
temp = temp.next;
}
originNode = temp;
} else {
ListNode temp = tail;
while(++index < size) {
temp = temp.pre;
}
originNode = temp;
}
node.next = originNode;
if(originNode.pre != null) {
node.pre = originNode.pre;
originNode.pre.next = node;
originNode.pre = node;
}
size++;
}
public void deleteAtIndex(int index) {
if(index < 0 || index >= size) {
return;
}
ListNode temp = head;
while(index-- > 0) {
temp = temp.next;
}
//删除的是头
if(temp.pre == null) {
head = temp.next;
} else {
temp.pre.next = temp.next;
}
//删除的是尾
if(temp.next == null) {
tail = temp.pre;
} else {
temp.next.pre = temp.pre;
}
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);
*/
206.反转链表
leetcode链接:https://leetcode.cn/problems/reverse-linked-list
leetcodeAC记录:
代码如下:
public ListNode reverseList(ListNode head) {
if(head == null) {
return null;
}
ListNode p1 = head;
ListNode p2 = head.next;
ListNode p3 = (p2 == null) ? null : p2.next;
p1.next = null;
while(p2 != null) {
p2.next = p1;
p1 = p2;
p2 = p3;
p3 = p3 == null ? null : p3.next;
}
return p1;
}