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

203.移除链表元素

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

心得:这道题做出来了,但是看了题解,发现使用虚拟头结点更简清晰,附上代码。

没用虚拟头结点:

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

设置虚拟头结点:

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

707.设计链表

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

心得:时间不够,先学习一下思路,后面补代码

206.反转链表

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

心得:关键点在于要明确三个节点(上一个节点、当前节点、下一个节点),反转过程如下:

  1)首先记录下一个节点

  2)当前节点反转

  3)上一个节点移动

  4)当前节点移动

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        ListNode next = null;
        while(cur != null){
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}

 

 

posted @ 2023-02-04 14:39  橙子的房东  阅读(93)  评论(0)    收藏  举报