【Leetcode】链表专题

本文介绍了LeetCode链表专题中的两个问题:206.反转链表和83.删除排序链表中的重复元素。分别探讨了迭代法和递归法的实现原理,并通过实例展示了如何用这两种方法解决链表操作问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode链表专题

主要根据CSview一个校招刷题准备网站 做这个网站的人真的很厉害!进行整理
太困了,一学习就困,来刷刷题


前言

一、leetcode 206.反转链表

1.题目描述:

在这里插入图片描述

2.主要有两种方法,迭代法和递归法

先来描述两者的区别:
迭代法(Iteration)和递归法(Recursion)都是解决问题的方法,它们在编程中经常被用到。

迭代法是通过循环的方式,重复执行某段代码直到满足条件为止。通常使用迭代语句(如for循环或while循环)来实现。迭代法通常比递归法更直观,更容易理解,并且在一些情况下效率更高。它的实现方式类似于人们在日常生活中的思考方式,一步一步地解决问题。

递归法则是指一个函数在执行过程中调用自己的编程技巧。递归的本质是将问题划分为规模更小的子问题,并不断地重复这个过程直到达到最基本的情况,然后逐层返回结果。递归在某些情况下更为简洁,但可能会导致栈溢出或性能问题,因为每次递归调用都会增加函数调用栈的深度。

3.迭代法:

我们可以思考,是否可以通过指针指向位置的交换来实现反转。
定义三个指针:
prev代表在迭代过程中已经反转的头节点,初始值指向null;
curr指向当前节点,也就是待反转部分的头节点。初始值为链表的头节点head;
next指向curr.next节点,当前节点的下一个节点;

prev=null;
curr=head;
next=null;
//交换过程如下:
next=curr.next;
curr.next=prev;
prev=curr;
curr=next;

让我们以具体的示例来描述迭代法中的每个循环。

假设原始链表为:1 -> 2 -> 3 -> 4 -> 5,我们将对其进行反转。

  1. 初始化

    • 初始时,prev = nullcurr = 1next = null
    • 链表状态:prev -> null, curr -> 1 -> 2 -> 3 -> 4 -> 5next -> null
  2. 第一次迭代

    • 进入循环,next 指向 curr.next,即 2
    • 链表状态:prev -> null, curr -> 1 -> null, next -> 2 -> 3 -> 4 -> 5
    • curr.next 指向 prev,即 1next 指向 null
    • 移动 prevcurr 的位置,即 prev -> 1
    • 移动 currnext 的位置,即 curr -> 2
  3. 第二次迭代

    • 进入循环,next 指向 curr.next,即 3
    • 链表状态:prev -> 1 -> null, curr -> 2 -> null, next -> 3 -> 4 -> 5
    • curr.next
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值