代码随想录刷题记录第三天 | 链表 | 203. 移除链表元素
题目:
203. 移除链表元素 - https://leetcode.cn/problems/remove-linked-list-elements/description/
707. 设计链表 - https://leetcode.cn/problems/design-linked-list/
206. 反转链表 - https://leetcode.cn/problems/reverse-linked-list/description/
203. 移除链表元素
题目内容:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
解题思路
设置虚拟头节点,如果不设置头节点,就要单独使用while循环对头节点进行处理(因为可能从head开始就一直是符合val的值的节点),然后直到 head.val != val ,再设置要返回的新的头节点使其等于head,然后再设置一个新的节点去遍历链表删除节点值等于val的节点,设置虚拟节点可以统一处理。
解题代码
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode first = new ListNode();
first.next = head;
ListNode temp = first;
while(temp.next != null){
if(temp.next.val == val){
temp.next = temp.next.next;
}else {
temp = temp.next;
}
}
return first.next;
}
}
707. 设计链表
题目内容你可以选择使用单链表或者双链表,设计并实现自己的链表。
单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。
如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。
解题代码
class MyLinkedList {
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 cur = head;
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;
}
index = Math.max(0, index);
size++;
ListNode pred = head;
for (int i = 0; i < index; i++) {
pred = pred.next;
}
ListNode toAdd = new ListNode(val);
toAdd.next = pred.next;
pred.next = toAdd;
}
public void deleteAtIndex(int index) {
if (index < 0 || index >= size) {
return;
}
size--;
ListNode pred = head;
for (int i = 0; i < index; i++) {
pred = pred.next;
}
pred.next = pred.next.next;
}
}
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
解题代码
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode cur = head;
ListNode temp ;
while(cur != null){
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}

浙公网安备 33010602011771号