我准备开启一个刷题系列 每天至少一道题,越多越好,可以和我一起,我会将题目在力扣的位置和解析写下,适合全阶段的java学习者,,与君共勉!
1.1 力扣 203:
题意:删除链表中等于给定值 val 的所有节点。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
先去想!!
解析:根据题意,我们要考虑头节点是否为目标数怎么处理 , 比较简单
public ListNode m1(ListNode head , int val){
while(head != null && head.val == val){
head = head.next;
}
if(head == null){
return;
}
ListNode first = head;
ListNode cur = head.next;
while(cur != null){
if(cur.val == val){
cur.next = cur.next.next;
}else{
head = cur ;
}
cur = cur.next;
}
return first;
}
1.2 设计链表707
题意:
在链表类中实现这些功能:
get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
class Node{
int val;
Node next
public Node(){
}
public Node(int val){
this.val = val;
}
}
class MyNode{
int size;
Node head;
public MyNode(){
size = 0 ;
head = new Node(0);
}
public int get(int index){
if(index <0 || index >= size){
return -1;
}
Node cur = head;
for(int i = 0 ; i <= index ; i++){
cur = cur.next;
}
return cur.val;
}
//addAtIndex(index,val)
public void addAtIndex(int index , int val){
if(index > size){
return;
}
if(index <0){
index = 0;
}
size++;
Node cur = head;
for(int i = 0 ; i< index; i++){
cur = cur.next;
}
Node newnode = new Node(val);
newnode.next = cur.next;
cur.next = newnode;
}
//addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
public void addAtHead(int val){
addAtIndex( 0 , val);
}
public void addAtTail(int val){
addAtIndex(size , val);
}
//deleteAtIndex(index)
public void deleteAtIndex(int index){
if(index <0 || index >= size){
return;
}
size--;
Node cur = head;
for(int i = 0 ; i < index ; i++){
cur = cur.next;
}
cur.next = cur.next.next;
}
}