前言
基于链表的操作比较多,希望通过一系列的实战操作,加深对链表的理解和应用。每日更新两题,希望学习的小伙伴关注一波,评论区欢迎讨论交流。
今日份练习
leetcode合并两个有序链表
实现原理
1.先建一个dummy的链表,返回时需要移除dummy的头节点。
2.比较两个合并的链表值,将链表小的值加入dummy的链表中,并向后移动一个指针。
3.一个链表指针移动至末尾后把另一个链表的数据加入dummy链表。
运行效果
由于新建了一个空链表,导致内存占比有点高,后续可以基于现有两个链表中一个进行合并优化。
代码实现
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1==null){return list2;}if(list2==null){return list1;}ListNode dummy=new ListNode(0);ListNode prev=dummy;while(list1!=null&&list2!=null){if(list1.val<=list2.val){prev.next=list1;list1=list1.next;prev=prev.next;}else if(list1.val>list2.val){prev.next=list2;list2=list2.next;prev=prev.next;}}if(list1==null){prev.next=list2;}if(list2==null){prev.next=list1;}return dummy.next;}
}