剑指offer——合并两个排序的链表
来源:互联网 发布:网络漫画家朴泰俊 编辑:程序博客网 时间:2024/05/29 08:08
面17
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
其实很像归并排序中的归并环节,所以考虑的东西基本差不多。
一开始我的代码发生了空指针错误。错误代码如下。
public ListNode Merge(ListNode list1,ListNode list2) { ListNode result = null; ListNode temp = result; // 错误开始的地方 if(list1==null&&list2==null) return null; if(list1==null) return list2; if(list2==null) return list1; if(list1.val<=list2.val){ result = list1; list1 = list1.next; } else{ result = list2; list2 = list1.next; } while(list1!=null&&list2!=null){ if(list1.val<=list2.val){ temp.next = list1; // NullPointerException list1 = list1.next; temp = temp.next; } else{ temp.next = list2; list2 = list2.next; temp = temp.next; } } if(list1==null) temp.next = list2; else temp.next = list1; return result; }
在创建temp这个对象时,我将result赋予了它,其实temp是指向了此时result指向的对象,也就是null对象。
之后result引用指向了某个节点,但temp的指向并不会因此改变。仍指向null。所以发生错误!!
把temp的创建移到result改变引用对象后即可。
构建一个fake head,可以少些很多代码
public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode head = new ListNode(1); ListNode temp = head; while(list1!=null&&list2!=null){ if(list1.val<=list2.val){ temp.next = list1; // NullPointerException list1 = list1.next; } else{ temp.next = list2; list2 = list2.next; } temp = temp.next; } if(list1==null) temp.next = list2; else temp.next = list1; return head.next; }}
还有递归的解法
public ListNode Merge(ListNode list1, ListNode list2) { ListNode head = null; if(list1==null&&list2==null) return null; else if(list1==null) return list2; else if(list2==null) return list1; if (list1.val >= list2.val) { head = list2; head.next = Merge(list1, list2.next); } else { head = list1; head.next = Merge(list1.next, list2); } return head; }
阅读全文
0 0
- 《剑指offer》——合并两个排序的链表
- 《剑指offer》——合并两个排序的链表
- 剑指offer——合并两个排序的链表
- 合并两个排序的链表——剑指offer
- 剑指offer——合并两个排序的链表
- 剑指offer——两个合并排序的链表
- 剑指Offer——合并两个排序的链表
- 剑指offer—合并两个排序的链表
- 剑指offer(16)—合并两个排序的链表
- 剑指offer—合并两个排序的链表
- 剑指offer代码解析——面试题17合并两个排序的链表
- 剑指Offer:面试题17——合并两个排序的链表
- 剑指offer——面试题17:合并两个排序的链表
- 剑指Offer——(16)合并两个排序的链表
- 剑指offer——合并两个排序的链表__
- 剑指offer——16.合并两个排序的链表
- 剑指 Offer —16—合并两个排序的链表
- 剑指offer 面试题17—合并两个排序的链表
- [BZOJ4650][NOI2016]优秀的拆分-后缀数组
- Java知识小结—(2)
- Going Home POJ
- 欢迎使用CSDN-markdown编辑器
- MySQL优化必须调整的10项配置
- 剑指offer——合并两个排序的链表
- 正则详解
- CSS两双列布局
- spring boot 启用原理
- linux Ubuntu常用命令
- 死锁
- linu spi子系统驱动开发笔记之实例(1)
- c语言 字符串和指针部分
- ROS开机自启