前言
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;
}
完