LeetCode 剑指Offer 18[链表 递归] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 剑指Offer 18[链表 递归] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
首先用常规的遍历方法解决,如果头部的值是val直接返回头的next即可,不是遍历头部,找到val后直接跳过该节点,并返回head即可,代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(head -> val == val) {
return head -> next;
}
ListNode* node = head;
while(node -> next != nullptr) {
if(node -> next -> val == val) {
node -> next = node -> next -> next;
return head;
}
node = node -> next;
}
return head;
}
};
递归的方式就比较巧妙,可以理解从尾部到头判断,空则返回空,非空判断是否等于val,等于返回其next,不等于则返回本身,代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(head == nullptr) {
return nullptr;
}
head -> next = deleteNode(head -> next, val);
if(head -> val == val) {
return head -> next;
}
return head;
}
};
以上是关于LeetCode 剑指Offer 18[链表 递归] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Algorithm 剑指 Offer 18. 删除链表的节点
LeetCode(剑指 Offer)- 18. 删除链表的节点
LeetCode(剑指 Offer)- 18. 删除链表的节点