代码随想录算法训练营第三天 | 203:移除链表元素 707:设计链表 206:反转链表
203:移除链表元素
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
//虚拟头节点
if (head == null) {
return head;
}
ListNode node = new ListNode(-1,head);
node.next = head;
ListNode cur = node;
while (cur !=null && cur.next != null) {
// 注意if和else
if (cur.next.val == val) {
cur.next = cur.next.next;
} else{
cur = cur.next;
}
}
return node.next;
}
}
707:设计链表
class MyLinkedList {
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
int size;
ListNode head;
public MyLinkedList() {
size = 0;
head = new ListNode(0);
}
public int get(int index) {
if (index < 0 || index >= size) {
return -1;
}
ListNode node = head;
for (int i = 0; i <= index; i++) {
node = node.next;
}
return node.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 < 0) {
index = 0;
}
if (index > size) {
return;
}
size++;
ListNode node = head;
ListNode cur = new ListNode(val);
// 如果index=0 则会拿到头,大于size拿到尾巴,否则拿到上一个
for (int i = 0; i < index; i++) {
node = node.next;
}
cur.next = node.next;
node.next = cur;
}
public void deleteAtIndex(int index) {
if (index < 0 || index >= size) {
return;
}
size--;
if (index == 0) {
head = head.next;
return;
}
ListNode node = head;
for (int i = 0; i < index; i++) {
node = node.next;
}
node.next = node.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);
*/
206:反转列表
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}
补第三天的,加油加油。