河北建设厅网站官网,12345可以咨询房产问题吗,免费咨询大夫,天津做网站哪家公司好一、题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例#xff1a;
输入#xff1a;l1 [1,2,4], l2 [1,3,4]
输出#xff1a;[1,1,2,3,4,4]输入#xff1a;l1 [], l2 []
输出#xff1a;[]输入#…一、题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例
输入l1 [1,2,4], l2 [1,3,4]
输出[1,1,2,3,4,4]输入l1 [], l2 []
输出[]输入l1 [], l2 [0]
输出[0]二、题解
思路分别用两个指针遍历两个链表再用一个指针专门改变链表的指向。 一开始先找出头更小的那个链表作为头节点依次取出两个指针指向的链表元素谁小就改变当前节点的指向让当前节点始终指向更小的元素。两个指针一直前进当指向为空时遍历结束。 /*** 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 head;//操作链表1的指针ListNode cur1 list1;//操作链表2的指针ListNode cur2 list2;//比较两个链表的头节点谁小谁就作为新的头if (list1.val list2.val) {head list1;cur1 list1.next;} else {head list2;cur2 list2.next;}ListNode pre head;while (true) {//遍历完了list1让pre直接指向list2if (cur1 null) {pre.next cur2;break;}//遍历完了list2让pre直接指向list1if (cur2 null) {pre.next cur1;break;}int val1 cur1.val;int val2 cur2.val;if (val1 val2) {pre.next cur1;pre pre.next;cur1 cur1.next;} else {pre.next cur2;pre pre.next;cur2 cur2.next;}}return head;}
}