🏝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就可以。