首页 > 其他分享 >代码随想录 | Day3 | LC 203移除链表元素、206反转链表

代码随想录 | Day3 | LC 203移除链表元素、206反转链表

时间:2023-01-24 14:33:57浏览次数:75  
标签:head ListNode cur 随想录 next 链表 移除 null

[203. 移除链表元素

image-20230114202812551
class Solution {                                                
    public ListNode removeElements(ListNode head, int val) {    
        if (head == null) {                                     
            return null;                                        
        }                                                       
        ListNode xuni_tou_node = new ListNode(0, head);         
        //等价于cur.value=0;cur.next=head;                         
        ListNode pre = xuni_tou_node;                           
        ListNode cur = head;                                    
                                                               
        while (pre.next!= null) { 
            if (head.val == val) {                                  
            head = head.next;                                   
        }//这个if循环一定是写在while里面的,参见[7,7,7,7]例子,第一次写外面了没过……                      
            if (cur.val == val) {                               
                pre.next = cur.next;                            
            }     
            else{ 
                pre = cur; 
                }
//            这个else第二次测试时候没写,理想的逻辑应该是当删除一个元素时,pre保持不动,只有cur在始终后移                                                                               
            cur = cur.next;                                     
        }                                                       
        return head;                                            
    }                                                           
}

206. 反转链表

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {//这个basecase还蛮重点的,next为空这个条件漏写导致一直报错
            return head;
        }
        ListNode pre = head;
        ListNode cur = head.next;//要保证使用.next的结点一定是存在的结点,即要保证head节点一定存在
        ListNode last = cur.next;//由上知要保证cur节点一定存在
        //三指针初始化完毕
        head.next = null; //首结点指向空,开始反转
        while (last != null) {
            cur.next = pre;//后结点的next指针指向前节点
           //三指针后移
            pre = cur;
            cur = last;
            last = last.next;
        }
        cur.next = pre;//null不能在存在null.next,即当last==null时必须得退出循环了,
        //所以最后一个结点的反转我是单独处理的
        return cur;
    }
}

总结:

链表题,在确定解题思想后,画图理思路、手动模拟的过程很重要,弄明白这些,链表题还是很简单的(Tip今天都是代码很快就出来了,但改错,纠细小问题花了很多时间 (;′⌒`))

707. 设计链表

image-20230114220246791

个人原因,太菜又时间紧张,所有有些题只能在一刷时选择性放弃(挖坑,二刷时再来补……)

标签:head,ListNode,cur,随想录,next,链表,移除,null
From: https://www.cnblogs.com/szwsama/p/17066061.html

相关文章