LT简单题203-移除链表元素

题目描述:

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

方法一:双指针(C++代码)

/**

* Definition for singly-linked list.

* struct ListNode {

* int val;

* ListNode *next;

* ListNode() : val(0), next(nullptr) {}

* ListNode(int x) : val(x), next(nullptr) {}

* ListNode(int x, ListNode *next) : val(x), next(next) {}

* };

*/

class Solution {

public:

ListNode* removeElements(ListNode* head, int val) {

while(head != nullptr && head->val == val){ //首元结点单独处理

head = head->next;

}

ListNode* p = head; //p指向删除节点的前一节点

ListNode* q = head; //q指向当前节点

while(q != nullptr){

if(q->val == val){

p->next = q->next;

}else{

p = q;

}

q = q->next;

}

return head;

}

};

时间复杂度:O(n),空间复杂度:O(1)

经验分享 程序员 微信小程序 职场和发展