文章目录
- 前言
- 1.题目
- 2.分析思路
- 3.参考代码
前言
Leetcode–-移除链表元素
1.题目

2.分析思路
首先要创建一个新的链表,在定义三个指针,newHead,newTail和pcur,分别代表新链表头,新链表尾以及用于遍历原链表。
 其次是,如果pcur->val!=val,那么newTail下一个结点指向pcur(newTail->next=pcur),然后newTail往后移动(newTail=newTail->next),pcur也要往后一动,如果pcur->val==val,那么只需要pcur往后移动,直到遍历完原链表。
 还有一个是在遍历完以后要将newTail的指向的指针设置为NULL
 最后便要考虑特殊情况,例如示例2中,head=[],是一个空链表,那么在最开始便要判断head是否是空链表。
 
3.参考代码
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
    if(head==NULL)
        return head;
    ListNode* pcur=head;
    ListNode* newHead=NULL;
    ListNode*newTail=NULL;
    while(pcur)
    {
        //如果pcur->val!=val,那么节点要尾插到新链表中
        if(pcur->val!=val)
        {
            //判断新链表是否为空
            if(newHead==NULL)
            {
                newHead=newTail=pcur;
            }else{
                newTail->next=pcur;
                newTail=newTail->next;
            }
        }
        pcur=pcur->next;
    }
    if(newTail)
        newTail->next=NULL;
    return newHead;
}
完



















