将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
- /**
- * 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) {
- // ListNode list = new ListNode();
- // ListNode p=list;
- // while(list1 != null && list2 != null){
- // if(list1.val > list2.val){
- // p.next = list2;
- // list2 = list2.next;
- // }else{
- // p.next = list1;
- // list1 = list1.next;
- // }
- // p=p.next;
- // }
- // while(list1 != null){
- // p.next = list1;
- // p=p.next;
- // list1 = list1.next;
- // }
-
- // while(list2 != null){
- // p.next = list2;
- // p=p.next;
- // list2 = list2.next;
- // }
-
- // return list.next;
- //尝试递归写,这个方法效率更优
- if(list1 == null)
- return list2;
- else if(list2 == null)
- return list1;
- else if(list1.val<list2.val){
- list1.next = mergeTwoLists(list1.next,list2);
- return list1;
- }
- else{
- list2.next = mergeTwoLists(list1,list2.next);
- return list2;
- }
-
-
- }
- }
给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
- /**
- * 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 middleNode(ListNode head) {
- ListNode p,q;
- p=q=head;
- while(q!=null&&q.next!=null){
- p=p.next;
- q=q.next.next;
- }
- return p;
- }
- }