目录
题目:链表相加(二)_牛客题霸_牛客网 (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 *ListNode
- var carry int
-
- for head1 != nil || head2 != nil || carry > 0 {
- var sum int
- if head1 != nil {
- sum += head1.Val
- head1 = head1.Next
- }
- if head2 != nil {
- sum += head2.Val
- head2 = head2.Next
- }
- res = &ListNode{
- Val: (sum + carry)%10,
- Next: res,
- }
- carry = (sum + carry)/10
- }
- return res
- }
-
- func reverse(head *ListNode) *ListNode {
- var next *ListNode
- var prev *ListNode
- for head != nil {
- next = head.Next
- head.Next = prev
- prev = head
- head = next
- }
- return prev
- }


- 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 main
-
- import . "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 := head
- num := []int{}
- for cur != nil {
- num = append(num, cur.Val)
- cur = cur.Next
- }
- sort.Ints(num)
- cur = head
- i := 0
- for cur != nil {
- cur.Val = num[i]
- cur = cur.Next
- i++
- }
- return head
- }

以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~