203. Remove Linked List Elements

来源:互联网 发布:苏州固锝 知乎 编辑:程序博客网 时间:2024/06/05 11:09

原文题目:

203. Remove Linked List Elements


读题:

删除链表中节点的值与目标值相等的节点,这和单链表删除某个节点不一样的地方在于,可能需要删除多个节点。

解法一是自己写的,利用两个指针p和q,如果p,q相等,则将p->next = q->next,跳过q节点

解法二是AC代码里比较好的

//方法一 42msclass Solution {public:ListNode* removeElements(ListNode* head, int val) {ListNode* temp = new ListNode(0);temp->next = head;ListNode *p = temp;ListNode* q = head;while(q){//相等则删除该节点,if(q->val == val){p->next = q->next;}//不相等则将p指向q节点,这里的p至是临时指针,最后返回的是temp,因此p的改变不影响返回else{p = q;}q = q->next;}return temp->next;}};//方法二 25msclass Solution {public:ListNode* removeElements(ListNode* head, int val) {if(!head) return nullptr;//递归处理,将head的下一个节点指向剩余处理过的链表head->next = removeElements(head->next, val);//当head第一个节点为目标值,则将head往后移动一个节点即可,if(head->val == val){ListNode * temp = head;head = head->next;delete temp;}return head;}};


原创粉丝点击