文章目录
- 前言
- 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;
}
完