Day12_剑指Offer
package com.sorrymaker.day3612;
/**
* 输入两个链表,找出它们的第一个公共节点。
* @Author nextGame
* @Date 2021/8/23 20:26
* @Version 1.0
*/
public class GetIntersectionNode {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode A = headA, B = headB;
while (A!=B){
//当A遍历完自己的链条的时候,再从B的头部从新遍历,而B也是如此。
// 最后A == B 的时候,说明该节点为AB链条的首个相遇节点。
A = A!=null? A.next:headB;
B = B!=null? B.next:headA;
}
return A;
}
}
package com.sorrymaker.day3612;
/**
* 输入两个递增排序的链表,
* 合并这两个链表并使新链表中的节点仍然是递增排序的。
* @Author nextGame
* @Date 2021/8/23 20:00
* @Version 1.0
*/
public class MergeTwoLists {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//dum是个伪头节点,
ListNode dum = new ListNode(0), cur = dum;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
//当l1.val小于l2.val时候,合并链表就加上l1的值,
cur.next = l1;
//l1值被拿去合并了,那就让l1 = l1.next
l1 = l1.next;
} else {
//当l1>=l2的值的时候,合并链表就加上l2的值。
cur.next = l2;
l2 = l2.next;
}
//每次cur都会向前走一格。直到循环结束。
cur = cur.next;
}
//当循环结束,即l1 或l2 为空,此时判断l1是否为空,当为空的时候,说明l2还没合并完成,反之亦然如此。
cur.next = l1 != null ? l1 : l2;
return dum.next;
}
}