1、LeetCode第203题解析
移除链表元素
题目描述:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
class Solution3 {
//使用头结点进行删除(方便很多,因为所有结点都可以使用前一个结点进行删除)
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode *dummyHead = new ListNode(-1);
dummyHead->next = head;//创建一个头结点,值为-1,指向链表第一个结点
ListNode *prev = dummyHead;//创建前一个结点指向头结点(创建前一个才能将这个结点后移,而dummyNode不能直接后移)
while(prev->next != nullptr) {
if(prev->next->val == val) {
// ListNode delNode = pre.next;
// pre.next = delNode.next;
// delNode.next = null;
prev->next = prev->next->next;
} else {
prev = prev->next;
}
}
prev = nullptr;
delete prev;
return dummyHead->next;
}
};
2、链表和递归
递归:本质上,递归就是将原来的问题,转化为更小的同一问题。
递归构建本质上可以分为2个部分:最基本问题的求解+将原问题转换为更小的问题。 以后如果忘记递归的定义,再想一想这个sum方法的应用。递归的理解不要拘泥于递归内部怎么调用,而要着眼于递归函数的语意,通过语意来理解很容易! 比如下面的sum函数,就是求解 arr[ l,n)范围内的数字和,这样理解就容易很多。