LeetCode Algorithm 剑指 Offer 18. 删除链表的节点

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 剑指 Offer 18. 删除链表的节点相关的知识,希望对你有一定的参考价值。

题目链接:剑指 Offer 18. 删除链表的节点

Ideas

算法:迭代
数据结构:链表
思路:这道题其实不需要什么双指针,一个指针就可以了。首先声明一个指针cur指向head,然后在保证cur不为空并且cur -> next也不为空的前提下,不断循环,判断cur -> next -> val是否与给定的val相等,如果相等的话,将cur -> next置为cur -> next -> next,相当于删除了cur -> next。这种做法有一个bug,那就是如果head -> val就是我们要删除的val,那么是没法处理的,所以针对head要单独处理一下。

Code

C++

class Solution 
public:
    ListNode* deleteNode(ListNode* head, int val) 
    	if (head -> val == val) 
    		return head -> next;
		
    	ListNode *cur = head;
		while (cur && cur -> next != nullptr) 
			if (cur -> next -> val == val) 
				cur -> next = cur -> next -> next;
			
			cur = cur -> next;
		
		return head;
    
;

以上是关于LeetCode Algorithm 剑指 Offer 18. 删除链表的节点的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Algorithm 剑指 Offer 24. 反转链表

LeetCode Algorithm 剑指 Offer 18. 删除链表的节点

LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表

LeetCode Algorithm 剑指 Offer 22. 链表中倒数第k个节点

LeetCode Algorithm 剑指 Offer 24. 反转链表

LeetCode Algorithm 剑指 Offer 57 - II. 和为s的连续正数序列