首页 > 其他分享 >移除链表元素

移除链表元素

时间:2022-10-15 14:25:13浏览次数:51  
标签:结点 ListNode cur 元素 head next 链表 移除

举个例子,链表里有元素,我们想要移除的元素值为1如下:

个人认为的主要思想就是:先记录后删除

1->5->2->5->8->1->0
NULL
0->5->2->5->8->1->0
对于头结点我们有三种情况

  1. 头结点为元素1
  2. 头结点元素为空null
  3. 头节点为其他元素,不为我们要删除的元素1

对于情况1,我们就需要特殊处理,要删掉它之后,头结点要移动到它的下个结点,然后再把它删去,才可以,所以我们就要提前记录下这个要被删除的原头结点。

关键代码为

 ListNode *tmp=head;
head=head->next;
delete tmp;

对于情况2
完全就不需要管,因为是空链表,最后直接返回链表的头结点时,直接就是空就可以了

对于情况3,就是删除非头结点的操作。

对于非头结点
下面我们来写,删除非头结点的操作
过程就是,我们遍历链表,如果遇到了等于要删除的元素,也是同样的把这个结点记录下来,然后把连接这个删除结点的前后两个结点,然后才是把这个纪律下的结点删除。

完整代码为:

class Solution {
public:
	ListNode* remove(ListNode* head, int val) {
		while (head != nullptr && head->val == val) {
			ListNode* t = head;
			head = head->next;
			delete t;
}
		ListNode* cur = head;
		while (cur != nullptr && cur->next != nullptr) {
			if (cur->next->val == val && cur->next != nullptr) {
				ListNode* t = cur->next;
				cur->next = cur->next->next;
				delete t;
			}
			else {

				cur = cur->next;
			}

		}
		return head;
	}
};


力扣203

标签:结点,ListNode,cur,元素,head,next,链表,移除
From: https://www.cnblogs.com/FJCLJ/p/16794117.html

相关文章