🏝1.问题描述:
🏝2.实现代码:
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
if(head==NULL)
return head;
ListNode *NewHead,*NewTail;
ListNode *pcur=head;
NewHead=NewTail=(ListNode*)malloc(sizeof(ListNode));
while(pcur)
{
if(pcur->val!=val)
{
NewTail->next=pcur;
NewTail=NewTail->next;
}
pcur=pcur->next;
}
if(NewTail)
NewTail->next=NULL;
ListNode *oj=NewHead;
NewHead=NewHead->next;
return NewHead;
}
🏝3.代码分析:
1.先对节点进行判空处理,因为节点数目可能为0,如果head为NULL,那么直接返回head。
2.然后创建一个头节点,一个尾节点,还有一个pcur节点去遍历原来的链表,如果这个节点的val不等于VAl那么就放在新节点里。
3.先动态申请一个节点,这样就可以避免在循环里去判断,最后返回NewHead->next就可以。