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

【面试必刷TOP101】链表相加 单链表的排序

目录

题目:链表相加(二)_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

题目:单链表的排序_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:链表相加(二)_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类
*/
func addInList( head1 *ListNode ,  head2 *ListNode ) *ListNode {// write code here
}

解题思路:

这道题我一开始想了不少方法,,在想怎么用 O(N) 的算法做,但是死来想去,大多方法都比较麻烦,最后就选择了一个代码比较好编写的方法,

思路如下:先把两个链表反转,这样就能进行相加的逻辑了,然后再依次相加即可,虽然遍历了三遍,但还是一个 O(N) 的算法:

代码:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类
*/
func addInList( head1 *ListNode ,  head2 *ListNode ) *ListNode {head1 = reverse(head1)head2 = reverse(head2)var res *ListNodevar carry intfor head1 != nil || head2 != nil || carry > 0 {var sum intif head1 != nil {sum += head1.Valhead1 = head1.Next}if head2 != nil {sum += head2.Valhead2 = head2.Next}res = &ListNode{Val: (sum + carry)%10,Next: res,}carry = (sum + carry)/10}return res
}func reverse(head *ListNode) *ListNode {var next *ListNodevar prev *ListNodefor head != nil {next = head.Nexthead.Next = prevprev = headhead = next}return prev
}

过啦!!!

题目:单链表的排序_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 the head node* @return ListNode类
*/
func sortInList( head *ListNode ) *ListNode {// write code here
}

解题思路:

怎么说呢,这道题我是直接链表转数组,再数组排序转回链表,实际上是有两种其他的方法的,一个是用归并排序来做,但是我实际上不太会归并啦,

另一种就是不调库,自己实现一份快排或者其他 nlogn 的排序,这个面试的时候看面试官怎么想吧,反正我现在是偷懒调库了~

代码:

package mainimport . "nc_tools"
import "sort"/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param head ListNode类 the head node* @return ListNode类*/
func sortInList( head *ListNode ) *ListNode {cur := headnum := []int{}for cur != nil {num = append(num, cur.Val)cur = cur.Next}sort.Ints(num)cur = headi := 0for cur != nil {cur.Val = num[i]cur = cur.Nexti++}return head
}

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

http://www.lryc.cn/news/170902.html

相关文章:

  • Visual Studio复制、拷贝C++项目与第三方库配置信息到新的项目中
  • rust迭代器
  • 软件定制开发的优势与步骤|APP搭建|小程序
  • ERR_CONNECTION_REFUSED等非标准的HTTP错误状态码原因分析和解决办法
  • 瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件
  • ES6面试题总结
  • mybatisplus,jdbc 批量插入
  • 如何使用IP归属地查询API来追踪网络活动
  • 【SQL】S0 系列博文大纲
  • 2023年8月体育用品行业数据分析(京东数据产品)
  • 国内高校镜像网站
  • Linux安装kafka-manager
  • MYSQL索引——B+树讲解
  • VB将十进制整数转换成16进制以内的任意进制数
  • 基于SpringBoot+Vue的宠物领养饲养交流管理平台设计与实现
  • 【图像去噪】【TGV 正则器的快速计算方法】通过FFT的总(广义)变化进行图像去噪(Matlab代码实现)
  • windbg调试句柄问题
  • 9月13-14日上课内容 第三章 ELK日志分析系统及部署实例
  • 服务器端应用的安装
  • 关于硬盘质量大数据分析的思考
  • RK3568核心板分区空间不足,如何修改分区大小?
  • Linux系统怎么修改主机名
  • BroadcastChannel方法跨浏览器窗口通信
  • 山石网科国产化防火墙,打造全方位边界安全解决方案
  • AVL 树
  • ggplot2做图(填坑中)
  • Python日志处理器,同时打印到控制台和保存到文件中,并保证格式一致
  • JavaWeb后端开发登录操作 登录功能 通用模板/SpringBoot整合
  • The 2023 ICPC Asia Regionals Online Contest (1)(A D I J K L)
  • C++ PrimerPlus 复习 第七章 函数——C++的编程模块(上)