Day2 203.移除链表元素

力扣题目链接(opens new window)

题意:删除链表中等于给定值 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 输出:[]

思路1:直接使用原来的链表来进行删除操作
class Solution {
public:
	ListNode* removeElements(ListNode* head, int val) {
		//删除头节点(头结点不为空,且他的值也等于要删除的值)
		while (head != NULL && head->val == val) {
			//将头结点的指针赋值给一个临时变量:
			ListNode* temp = head;
			//头结点指向他的下一个
			head = head->next;

			//删除之前的头结点:
			delete temp;

		}
		//删除非头节点;
		ListNode* cur = head;
		//头结点不为空,且他的next也不为空:
		while (cur != NULL && cur->next != NULL) {

			if (cur->next->val == val) {

				//将要删除的节点赋值给一个临时变量;
				ListNode* temp = cur->next;
				cur->next = cur->next->next;
				//释放刚才要删除的那个结点(即cur->next已被删除)
				delete temp;
			}
			else {
				cur = cur->next;
			}

		}
		return head;
	}

};
思路2:设置一个虚拟头结点在进行操作
class Solution{
public:
	ListNode* removeElement(ListNode * head,int val) {
		ListNode * dummyHead = new ListNode(0);//设置一个虚拟头节点:
		dummyHead->next = head;//将虚拟头结点指向head,即将虚拟头结点和真实头结点连接起来;
		ListNode* current = dummyHead;
		while(current->next!=NULL){//主要current的next不为空,就一直往下走,即遍历所有元素:

			if (current->next->val == val) {//如果遇到与val相同的值,就移除
			
				ListNode* temp = current->next;

				current->next = current->next->next;
				delete temp;

			}
			else {//如果没遇到,就更新current的值,继续往下走,这一步做的是更新while循环的迭代条件;
			
				current = current->next;
			}
		}
		//返回时,返回真正的头结点;
		head = dummyHead->next;
		//然后删除虚拟头结点;
		delete dummyHead;
		//返回真实的头结点;
		return head;
	}
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值