当前位置: 首页 > wzjs >正文

做网站为什么要建站点使用下载的整站asp源代码建设自己的私人网站需要注意哪些

做网站为什么要建站点,使用下载的整站asp源代码建设自己的私人网站需要注意哪些,wordpress 手机更新,网站建设动态部分实训报告单向链表反转的实现方法 ​ https://www.zhihu.com/question/441865393/answer/3208578798 ​ 单向链表反转是数据结构中的经典问题,在面试和实际开发中经常遇到。以下是 多种实现方式(包括递归和迭代),以 Go 语言为例。1. 单向链…

单向链表反转的实现方法

https://www.zhihu.com/question/441865393/answer/3208578798

单向链表反转是数据结构中的经典问题,在面试和实际开发中经常遇到。以下是 多种实现方式(包括递归和迭代),以 Go 语言为例。


1. 单向链表结构定义

type ListNode struct {Val  intNext *ListNode
}

2. 迭代法(推荐)

思路

  • 使用 三个指针 prevcurrnext,逐个反转节点指向。
  • 时间复杂度 O(n)空间复杂度 O(1)(仅用常量额外空间)。

代码实现

func reverseList(head *ListNode) *ListNode {var prev *ListNode  // 前驱节点curr := head        // 当前节点for curr != nil {next := curr.Next  // 暂存下一个节点curr.Next = prev   // 反转指向prev = curr        // prev 后移curr = next        // curr 后移}return prev  // 返回新头节点
}

示例

输入: 1 -> 2 -> 3 -> nil  
输出: 3 -> 2 -> 1 -> nil

3. 递归法

思路

  • 递归到链表末尾,然后逐层反转指针。
  • 时间复杂度 O(n)空间复杂度 O(n)(递归栈开销)。

代码实现

func reverseList(head *ListNode) *ListNode {if head == nil || head.Next == nil {return head  // 递归终止条件}newHead := reverseList(head.Next)  // 递归到末尾head.Next.Next = head              // 反转指针head.Next = nil                    // 避免循环引用return newHead
}

执行过程

reverseList(1):reverseList(2):reverseList(3): return 32.Next.Next = 2 → 3 -> 22.Next = nil → 3 -> 2 -> nil
1.Next.Next = 1 → 2 -> 1
1.Next = nil → 3 -> 2 -> 1 -> nil

4. 头插法(利用哑节点)

思路

  • 遍历链表,将每个节点插入到 哑节点(Dummy Node) 之后。
  • 时间复杂度 O(n)空间复杂度 O(1)

代码实现

func reverseList(head *ListNode) *ListNode {dummy := &ListNode{}  // 哑节点for head != nil {next := head.Next      // 暂存下一个节点head.Next = dummy.Next // 头插dummy.Next = head      // 更新哑节点指向head = next            // 移动 head}return dummy.Next
}

流程示例

初始: dummy -> nil, 链表: 1 -> 2 -> 3 -> nil第1步: dummy -> 1 -> nil  
第2步: dummy -> 2 -> 1 -> nil  
第3步: dummy -> 3 -> 2 -> 1 -> nil

5. 对比总结

方法时间复杂度空间复杂度适用场景
迭代法O(n)O(1)大多数情况(推荐)
递归法O(n)O(n)代码简洁,但栈溢出风险
头插法O(n)O(1)需要哑节点辅助

6. 测试用例

func printList(head *ListNode) {for head != nil {fmt.Print(head.Val, " -> ")head = head.Next}fmt.Println("nil")
}func main() {head := &ListNode{1, &ListNode{2, &ListNode{3, nil}}}printList(head)          // 1 -> 2 -> 3 -> nilnewHead := reverseList(head)printList(newHead)       // 3 -> 2 -> 1 -> nil
}

7. 常见问题

Q1:递归法的缺点?

  • 链表过长时可能导致 栈溢出(Stack Overflow)。
  • 递归调用有额外空间开销。

Q2:如何优化递归法?

  • 某些编译器支持 尾递归优化(Tail Call Optimization, TCO),但 Go 目前不支持。

Q3:迭代法为什么更推荐?

  • 无栈溢出风险,适合处理超长链表。
  • 空间效率更高(O(1))。

掌握单向链表反转是理解指针操作的基础,建议手写实现并测试边界条件(如空链表、单节点链表)。

http://www.dtcms.com/wzjs/816691.html

相关文章:

  • 做图网站地图模板建站难吗
  • 网站建设代理商电话广告免费设计在线生成
  • 山东旗舰建设集团网站百度减少大量网站收录
  • 旅游网站建设的目标是什么wordpress页脚间距代码
  • 建筑工程网站大全建设企业网站个人网上
  • 乐清网站建设哪家好营销团队
  • 没有网站如何做营销仿花瓣 wordpress
  • html企业网站模板电信网站开发语言主要用什么
  • 温州公司建设网站制作北京网络营销技术培训
  • 设计师素材库如何对seo进行优化
  • 设计师服务平台破解房门户网站如何做优化
  • 网站怎么防止黑客攻击宝安网站公司
  • html网页的基本结构seo搜索引擎优化薪酬
  • 购买网站做友情链接拥有域名后怎么建设网站
  • 字体设计网站大全网站建设费用会计处理
  • 网站建设定制开发湖南城乡建设部网站首页
  • 门户网站有什么特点wordpress xmlrpc
  • 蚂蚁网站建设游戏试玩平台代理
  • 营销型网站建设的目标是最简洁wordpress主题
  • app开发网站模板深圳展厅设计
  • seo建站是什么意思潍坊做网站哪家好
  • 商城网站建设平台网站策划书主题
  • 网站应包括的基本功能和高级功能自己网站上做淘宝搜索
  • 工商局网站怎么做股东实名认证网站建设价格由什么决定
  • 象山县住房建设局网站网站域名如何管理
  • 设备做外贸哪个网站好临沂市建设官方网站
  • 吉林建设厅网站首页电脑平面设计培训班多少钱
  • 松江新城投资建设有限公司网站泰州北京网站建设
  • 女子医院网站设计怎么做政协网站信息化建设的作用
  • 用ip地址做网站做内衣的网站好