当前位置:网站首页>[Offer18]删除链表的节点

[Offer18]删除链表的节点

2022-07-06 09:17:00 劲腰傩舞

问题

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。

返回删除后的链表的头节点。

注意:此题对比原题有改动

示例 1:

输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:

输入: head = [4,5,1,9], val = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    
public:
    /*返回链表的头指针,要么使用头结点->next实现,要么动态维护头指针。代码选择了第二种*/
	ListNode* deleteNode(ListNode* head, int val) {
    
		/*遍历该链表的一个指针*/
		ListNode* current = head;
		/*删除一个结点的本质是找到其前驱。*/
		ListNode* prior = head;
		/*没有指定链表的长度。那就一直循环。*/
		while (1) {
    
			/*找到结点的情况下*/
			if (current->val == val) {
    
				/*上来就直接找到了目标,第一个结点没有前驱。需要特殊处理*/
				if (current == head) {
    
				/*第一意识居然是head++,废了*/
					head = head->next;
					return head;
				}
				else {
    
					prior->next = current->next;
					return head;
				}
			}
			/*没有找到的话,备份一下当前结点*/
			prior = current;
			current = current->next;
		}
	}
};
原网站

版权声明
本文为[劲腰傩舞]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Abider2/article/details/124863747