牛商网建设的食品网站,上海网站建设公司服务怎么做,做网站一定要认证吗,网站流量多少可以盈利1.合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1#xff1a;输入#xff1a;l1 [1,2,4], l2 [1,3,4]
输出#xff1a;[1,1,2,3,4,4]示例 2#xff1a;输入#xff1a;l1 [], l2 []
输出输入l1 [1,2,4], l2 [1,3,4]输出[1,1,2,3,4,4]示例 2输入l1 [], l2 []输出[]示例 3输入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(list1null){ return list2; } else if(list2null){ return list1; }else if(list1.vallist2.val){ list1.next mergeTwoLists(list1.next,list2); return list1; }else{ list2.next mergeTwoLists(list1,list2.next); return list2; } } }2.两两交换链表中的节点给你一个链表两两交换其中相邻的节点并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题即只能进行节点交换。示例 1输入head [1,2,3,4]输出[2,1,4,3]示例 2输入head []输出[]示例 3输入head [1]输出[1]/** * 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 swapPairs(ListNode head) { // // 递归终止条件链表为空 或 只剩一个节点无法交换直接返回原节点 // if (head null || head.next null) { // return head; // } // // cur 是当前链表中第二个节点交换后会成为新的头节点 // ListNode cur head.next; // // 递归处理 cur.next 开始的剩余链表返回的结果作为原头节点的后继 // head.next swapPairs(cur.next); // // 交换当前两个节点cur 指向原头节点 head // cur.next head; // // 返回交换后的新头节点 cur // return cur; //非递归 ListNode pre new ListNode(0);//定义一个虚拟头结点 pre.next head; ListNode temp pre; while(temp.next!nulltemp.next.next!null){ ListNode start temp.next; ListNode end temp.next.next; temp.next end; // 步骤1前驱节点指向第二个节点 start.next end.next; // 步骤2第一个节点指向第二个节点的后继 end.next start; // 步骤3第二个节点指向第一个节点 temp start; // 步骤4移动temp到交换后的第一个节点下一轮的前驱 } return pre.next; } }3.重排链表给定一个单链表L的头节点head单链表L表示为L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值而是需要实际的进行节点交换。示例 1输入head [1,2,3,4]输出[1,4,2,3]示例 2输入head [1,2,3,4,5]输出[1,5,2,4,3]/** * 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 void reorderList(ListNode head) { if(headnull||head.nextnull||head.next.nextnull){ return; } // 找到倒数第二个节点prev和最后一个节点tail ListNode prev head; while(prev.next.next!null){ prevprev.next; } ListNode tail prev.next; //断开连接 prev.nextnull; //保留下一个节点 ListNode nextNode head.next; head.nexttail; tail.next nextNode; //递归 reorderList(nextNode); } }