代码随想录算法训练营第三天 | 链表 206. 反转链表 707. 设计链表 203. 移除链表元素

简介: 代码随想录算法训练营第三天 | 链表 206. 反转链表 707. 设计链表 203. 移除链表元素

一、前言

今天是代码训练营第三天,链表相关,LeetCode题分别是  206. 反转链表 707. 设计链表 203. 移除链表元素

二、 206. 反转链表

题目描述

网络异常,图片无法展示
|

网络异常,图片无法展示
|

思路分析

这个比较简单, 搞个新链表,一个中间节点然后来回切换就可以了

代码展示

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode result = null;
        ListNode cur = head;
        ListNode temp = null;
        while(cur != null){
            temp = cur.next;
            cur.next = result;
            result = cur;
            cur = temp;
        }
        return  result;
    }
}
复制代码

提交结果

网络异常,图片无法展示
|

三、 707. 设计链表

题目描述

网络异常,图片无法展示
|

思路分析

在这道题上面卡了很久,之前刷的时候落下了这道题,只有一点思路做起来就很难

其中添加首尾节点的方法都可以使用指定下标添加方法复用来做

主要需要注意的就是理解每个方法的作用,同时计算好边界

代码展示

public class MyLinkedList {
    int size;
    ListNode node;
    public MyLinkedList() {
        size = 0;
        node = new ListNode(0);
    }
    public int get(int index) {
        if (index < 0 || index >= size){
            return -1;
        }
        ListNode root = node;
        for (int i = 0; i <= index; i++) {
            root = root.next;
        }
        return root.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;
        }
        if (index < 0){
            index = 0;
        }
        ListNode temp = node;
        for (int i = 0; i < index; i++) {
            temp = temp.next;
        }
        ListNode root = new ListNode(val);
        root.next = temp.next;
        temp.next = root;
        size++;
    }
    public void deleteAtIndex(int index) {
        if (index < 0 || index >= size){
            return;
        }
        size--;
        if(index == 0){
            node = node.next;
            return;
        }
        ListNode temp = node;
        for (int i = 0; i < index; i++) {
            temp = temp.next;
        }
        temp.next = temp.next.next;
    }
    @Override
    public String toString() {
        return "MyLinkedList{" +
                "size=" + size +
                ", node=" + node +
                '}';
    }
}
复制代码

提交结果

网络异常,图片无法展示
|

四、 203. 移除链表元素

题目描述

网络异常,图片无法展示
|

思路分析

也是使用中间节点来做的

代码展示

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if (head == null){
            return null;
        }
        ListNode temp = new ListNode(-1, head);
        ListNode pre = temp;
        ListNode cur = head;
        while(cur != null){
            if (cur.val == val){
                pre.next = cur.next;
            }else{
                pre = cur;
            }
            cur = cur.next;
        }
        return temp.next;
    }
}
复制代码

提交结果

网络异常,图片无法展示
|

五、总结

今天有点累,思路分析都有点简略,有代码看起来比较难的可以去看代码随想录的网站或者直接评论留言,每天摸鱼的我肯定可以非常及时的回复



目录
相关文章
|
1月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
35 1
|
30天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
01_移除链表元素
01_移除链表元素
|
1月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
29 0
|
6月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
5月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
5月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
52 2
|
6月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
53 1