LeetCode28.Linked List— Remove Linked List Elements删除链表元素

Posted hu-19941213

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode28.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;
    
;

 

以上是关于LeetCode28.Linked List— Remove Linked List Elements删除链表元素的主要内容,如果未能解决你的问题,请参考以下文章

leetcode1300

Leetcode题解 - 双指针求n数之和

LeetCode OJ 061Rotate List

leetcode1033

LeetCode-Easy刷题(32) Linked List Cycle

leetcode--81-搜索旋转排序数组②