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. 删除链表的节点的主要内容,如果未能解决你的问题,请参考以下文章