【剑指offer】面试题25-合并两个排序的链表
2020-02-29 19:54
471 查看
题目
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
1.思路
(1)创建一个新链表newlist,尾插法不断将原来的两个链表的结点拼接到其尾部。
(2)当两个链表均不空,同时遍历两个链表,进行元素大小判断,摘下元素值较小的结点尾插到newlist,同时指针后移继续比较。
(3)循环跳出的时候有三种情况
①两个链表都到头了,不需要继续处理;
②list1没到头,newlist.next直接指向list1的剩余结点就好,因为原本就是有序单调递增的;
③list2没到头,newlist.next直接指向list2的剩余结点就好。
(4)返回新的合并后的单调递增的链表
2.代码(Java实现)
public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode newlist = new ListNode(10086); ListNode newindex = newlist; ListNode index1 = list1; ListNode index2 = list2; // 两个链表均不空 while(list1 != null && list2 != null) { if(list1.val < list2.val) { // list1 比 list2 的元素值小 index1 = index1.next; list1.next = newindex.next; newindex.next = list1; newindex = newindex.next; list1 = index1; }else { // list2 比 list1 的元素值小 index2 = index2.next; list2.next = newindex.next; newindex.next = list2; newindex = newindex.next; list2 = index2; } } if(list1 != null) { // list1不空 newindex.next = list1; }else { // list2不空 newindex.next = list2; } return newlist.next; } }
苏州大学计算机考研依然考过这个题,手写代码实现。
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 牛客剑指Offer面试题25:合并两个排序的链表
- 【剑指offer】面试题 25:合并两个排序的链表
- 剑指offer面试题25:合并两个排序的链表(c++ 递归+非递归)
- 剑指Offer面试题25:合并两个排序的链表
- 剑指offer面试题25:合并两个排序的链表-java
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- 【剑指offer】面试题25:合并两个排序的链表
- 剑指Offer:面试题题17 合并两个排序的链表
- 剑指offer之面试题17合并两个排序的链表
- 剑指offer代码解析——面试题17合并两个排序的链表
- 剑指Offer:面试题17——合并两个排序的链表
- 剑指offer之面试题17 :合并两个排序的链表
- 剑指Offer面试题17(Java版):合并两个排序的链表
- 剑指offer-面试题17-合并两个排序的链表
- 【剑指Offer学习】【面试题17 ::合并两个排序的链表】
- 【剑指offer】3.4代码的鲁棒性——面试题17:合并两个排序的链表
- 剑指面试题25-合并两个排序的链表
- 【剑指Offer】面试题17:合并两个排序的链表
- 剑指offer面试题17-:合并两个排序链表
- 剑指Offer----面试题17:合并两个排序的链表