JAVA 数据结构与算法 学习笔记2--链表

本文介绍了链表与数组的区别,强调链表在读少写多场景下的优势。讲解了链表的基本操作,如创建、添加、搜索、更新和删除元素,并提供了Java实现示例。同时,给出了两个LeetCode链表题目,分别是移除链表元素和反转链表,附带了解题代码。
摘要由CSDN通过智能技术生成

链表

学习视频:https://www.bilibili.com/video/BV1sy4y1q79M?p=12

链表和数组的区别:内存无序

链表:元素+next指针 (next指针指向下一个元素,最后一个指针指向null节点)
特点:读少写多-----leetcode里面链表结构已经给你了,但是也要学会
时间复杂度:访问 O(N)、搜索 O(N)、插入 O(1)、删除 O(1)

leetcode练习:203,206

JAVA操作

创建链表

LinkedList<Integer> list = new LinkedList<>();

添加元素

 list.add(1);//插入1
 list.add(1,99);//索引为1处,插入99 时间复杂度O(n)

搜索元素

int index = list.indexOf(99)//括号里是元素,返回的是索引

更新元素

list.set(索引,要替换的值);

删除元素

list.remove(索引);

列表长度

 int length = list.size();

LEETCODE 题目

  1. 移除链表元素
//定义链表
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){
	ListNode n = new ListNode();
	n.next = head;
	ListNode pre = head;
	ListNode o = n;
	while(o.next != null){
		if(o.next.val==val){
			o.next = pre.next;}
			else{o=pre;}
			pre=pre.next;}
			return n.next;
}}
  1. 反转链表
    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
/**
 * 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 pre = null;
      ListNode curr = head;
      while(curr!=null){
          ListNode next = curr.next;
          curr.next = pre;
          pre = curr;
          curr=next;
      }
      return pre;

      }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值