java数据结构与算法刷题(第一天)

我准备开启一个刷题系列 每天至少一道题,越多越好,可以和我一起,我会将题目在力扣的位置和解析写下,适合全阶段的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;
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值