链表
学习视频: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 题目
- 移除链表元素
//定义链表
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;
}}
- 反转链表
给你单链表的头节点 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;
}
}