【LeetCode】28.Linked List— Remove Linked List Elements删除链表元素

Remove all elements from a linked list of integers that have value val.

Example:

Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

说到删除,首先想到定义两个指针,分别指向要被删除的结点和该结点的前驱结点。这里还需要考虑头结点是需要删除结点的特殊情况。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode*p=head;      //定义前驱结点指针
        if(p==NULL) return NULL;
        ListNode*q=p->next;   //定义要删除的结点指针
        while(1)
        {
            if(q==NULL){ //如果链表只有一个结点且头结点是要删除的结点
                if(head->val==val)
                {
                    delete p;
                    return NULL;
                }
                else return head;
            }
            else{      //如果链表不止一个结点
                if(head->val==val)  //头结点是要删除的结点
                {
                    head=q;
                    delete p;
                    p=head;
                    q=p->next;
                }
                else if(q->val==val)  //找到要删除的结点
                {
                    p->next=q->next;
                    delete q;
                    q=p->next;           
                }
                else{          //没有要删除的结点,则一头后移。
                    p=p->next;
                    q=p->next;
                }
            }
        }
        return head;
    }
};

 

posted @ 2019-08-29 14:58  蓝天下的一棵草  阅读(188)  评论(0编辑  收藏  举报