合并两个有序链表

it2024-04-06  52

题目

将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。

分析

创建一个新的链表,依次从两个链表中取出当前节点进行比较,小的放到新链表上。最后如果其中一个链表还有剩余,直接放到新链表的末尾。注意不要忘了判断链表为空的状态。

代码实现

import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ public ListNode mergeTwoLists (ListNode l1, ListNode l2) { //其中有一个链表为空,返回另一个不会空的链表,如果都为空返回null if(l1==null){ return l2; } if(l2==null){ return l1; } //创建头结点 ListNode head = new ListNode(0); //最后返回的节点是头结点的next ListNode resultNode = head; // 开始遍历两个链表,一次比较两个链表节点的大小,小的放在head节点的next while(l1!=null&&l2!=null){ if(l1.val>l2.val){ head.next = l2; l2 = l2.next; }else{ head.next = l1; l1 = l1.next; } head= head.next; } //最后如果有一个链表还有剩余,直接把剩下的节点放到head尾部 head.next = (l1 == null)?l2:l1; //返回当时定义的节点的next return resultNode.next; } }

本题链接,传送门 思路比较简单,但还是要注重细节,在比较之前需要记录一下初始状态,最终返回的是初始结点的next节点。

有时候不是看到了希望再去坚持,而是坚持下去才能看到希望!

最新回复(0)