剑指 Offer 18.删除链表节点

题目表述

 

 

 

解法

双指针法

class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
            ListNode *a = head->next;
            ListNode *b = head;
            if(head->val == val){
                head = head->next;
            }
            while(a != nullptr){
                if(a->val == val){
                    b->next = a->next;
                }
                a = a->next;
                b = b->next;
            }
            return head;
    }
};

 

参考:https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/solution/mian-shi-ti-18-shan-chu-lian-biao-de-jie-dian-sh-2/

<1>定位节点

<2>修改引用

class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        if(head->val == val) return head->next;
        ListNode *pre = head, *cur = head->next;
     //定位到cur的位置后跳出循环 
while(cur != nullptr && cur->val != val) { pre = cur; cur = cur->next; }
     //修改引用
if(cur != nullptr) pre->next = cur->next; return head; } };

 

posted @ 2023-03-08 21:47  盏茶  阅读(15)  评论(0)    收藏  举报