今天太累了qwq代码思路改天补上。浅浅刷三题,放上代码。
public ListNode removeElements(ListNode head, int val) {
while(head != null && head.val == val){
head = head.next;
}
ListNode curr = head;
while(curr != null){
while(curr.next!=null && curr.next.val == val){
curr.next = curr.next.next;
}
curr = curr.next;
}
return head;
}
class ListNode{
int val;
ListNode next, prev;
ListNode(){};
ListNode(int val){
this.val = val;
}
}
class MyLinkedList {
int size;
ListNode head, tail;
public MyLinkedList() {
this.size = 0;
this.head = new ListNode(0);
this.tail = new ListNode(0);
head.next = tail;
tail.prev = head;
}
public int get(int index) {
if(index < 0 || index >= size){
return -1;
}
ListNode cur = this.head;
if(index >= size / 2){
cur = tail;
for(int i = 0; i < size - index; i ++){
cur = cur.prev;
}
} else {
for(int i = 0; i <= index; i ++){
cur = cur.next;
}
}
return cur.val;
}
public void addAtHead(int val) {
addAtIndex(0, val);
}
public void addAtTail(int val) {
addAtIndex(size, val);
}
public void addAtIndex(int index, int val) {
if(index > size){
return;
}
if(index < 0){
index = 0;
}
size ++;
ListNode pre = this.head;
for(int i = 0; i < index; i ++){
pre = pre.next;
}
ListNode newNode = new ListNode(val);
newNode.next = pre.next;
pre.next.prev = newNode;
newNode.prev = pre;
pre.next = newNode;
}
public void deleteAtIndex(int index) {
if(index < 0 || index >= size){
return;
}
size --;
ListNode pre = this.head;
for(int i = 0; i < index; i ++){
pre = pre.next;
}
pre.next.next.prev = pre;
pre.next = pre.next.next;
}
}
/**
* 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);
*/
public ListNode reverseList(ListNode head) {
return reverse(null, head);
}
private ListNode reverse(ListNode prev, ListNode cur){
if(cur == null){
return prev;
}
ListNode temp = null;
temp = cur.next;
cur.next = prev;
return reverse(cur, temp);
}