代码随想录算法训练营十期day3| 203.移除链表元素、707.设计链表、206.反转链表

day3| 203.移除链表元素、707.设计链表、206.反转链表

203. 移除链表元素

题目链接:https://leetcode.cn/problems/remove-linked-list-elements

代码

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


    }
}

707.设计链表

题目链接:https://leetcode.cn/problems/design-linked-list/

class MyLinkedList {
    int size;
    ListNode head;

    public MyLinkedList() {
        size = 0;
        head = new ListNode(0);
    }

    public int get(int index) {
        if (index < 0 || index >= size) {
            return -1;
        }
        ListNode cur = head;
        for (int i = 0; i <= index; i++) {
            cur = cur.next;
        }
        return cur.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;
        }
        index = Math.max(0, index);
        size++;
        ListNode pred = head;
        for (int i = 0; i < index; i++) {
            pred = pred.next;
        }
        ListNode toAdd = new ListNode(val);
        toAdd.next = pred.next;
        pred.next = toAdd;
    }

    public void deleteAtIndex(int index) {
        if (index < 0 || index >= size) {
            return;
        }
        size--;
        ListNode pred = head;
        for (int i = 0; i < index; i++) {
            pred = pred.next;
        }
        pred.next = pred.next.next;
    }
}

class ListNode {
    int val;
    ListNode next;

    public ListNode(int val) {
        this.val = val;
    }
}

有点坑,搞了半天才知道要自己写链表类

注意事项:

  • 在这个题目中,链表的索引是从0开始,不是1,我第一遍是从默认从1开始写代码,报错,再重新修改!要认真读题,不是“默认”。
  • 当链表发生变化时,记得更新size值。

206.反转链表

题目链接:https://leetcode.cn/problems/reverse-linked-list/

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null)
            return head;
        ListNode pre=new ListNode();
        int i=0;
        while (head!=null)
        {
            ListNode temp=new ListNode(head.val);
            if(i==0){
                i++;
            }else {
                temp.next=pre;
            }
            pre=temp;
            head=head.next;
        }
        return pre;
    }
}

你可能感兴趣的:(代码随想录算法训练,链表,算法,数据结构)