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

57 阅读1分钟

203. 移除链表元素

[](203. 移除链表元素 - 力扣(LeetCode))

主要需要理解链表的构造和和储存方式,在理解链表的储存方式的基础上,删除链表中的元素,具体的操作方式如下图。在需要删除d元素的时候,需要找到d的前一个元素c,将c的next指针指向e的地址。

20200806195114541.png


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

707.设计链表

[题目链接](707. 设计链表 - 力扣(LeetCode))

该题目主要设计链表常用的五个接口:

  • 获取链表第index个节点的数值
  • 在链表的最前面插入一个节点
  • 在链表的最后面插入一个节点
  • 在链表第index个节点前面插入一个节点
  • 删除链表的第index个节点

在实际操作时设置一个虚拟头结点再进行操作

206.反转链表

[题目链接](206. 反转链表 - 力扣(LeetCode))

该题目主要解题思路为给链表中的每一个元素再定义一个指针指向他的上一个元素,流程如下图,在为每个元素添加一个pre指针指向它的上一个元素,结果返回pre指针

206.翻转链表.gif

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode cur = head;
        ListNode temp = null;
        while (cur != null) {
            temp = cur.next;// 保存下一个节点
            cur.next = prev;
            prev = cur;
            cur = temp;
        }
        return prev;
    }
}