美文网首页
203. 移除链表元素

203. 移除链表元素

作者: mydre | 来源:发表于2020-11-08 09:12 被阅读0次

    删除链表中等于给定值 val 的所有节点。

    示例:

    输入: 1->2->6->3->4->5->6, val = 6
    输出: 1->2->3->4->5

    首先分两种情况讨论

    ① 节点为空

    这种情况可以直接返回NULL;

    ② 节点不为空

    当节点不为空时,为了便于分析,可以首先分析头结点后面的元素,即while(LN->next){},因为这样可以便于对节点进行删除(便于控制指针的指向)。
    然后,在最后对head节点进行判断,即if(head){}。

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* removeElements(struct ListNode* head, int val){
        typedef struct ListNode * LinkNode;
        LinkNode LN = head;
        if(LN == NULL) return NULL;
        while(LN->next){
            LinkNode LNN = LN->next;
            if(LNN->val == val){
                LN->next = LNN->next;
                free(LNN);
            }else{
                LN = LNN;
            }
        }
        if(head){//在最后对head节点进行判断,可以比较方便
            if(head->val == val) return head->next;
        }
        return head;
    }
    

    执行结果

    image.png

    相关文章

      网友评论

          本文标题:203. 移除链表元素

          本文链接:https://www.haomeiwen.com/subject/hkwcbktx.html