public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
//5.将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。(重点)
**方案一:直接判断**
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//1.对l1与l2进行非空判断
if(l1 == null){
return l2;
}
if (l2 == null){
return l1;
}
ListNode cur1 = l1;
ListNode cur2 = l2;
ListNode newHead = null;
ListNode newTail = null;
while (cur1 != null && cur2 != null){
if (cur1.val < cur2.val){
//把cur1指向的节点插入到新链表尾部
if (newHead == null){
//新链表是空表
newHead = cur1;
newTail = cur1;
cur1 = cur1.next;
}else {
//链表不是空链表
newTail.next = cur1;
//更新尾部的指向
newTail = newTail.next;
cur1 = cur1.next;
}
}else {
// 就把 cur2 指向的节点插入到新链表的尾部
if (newHead == null){
newHead = cur2;
newTail = cur2;
cur2 = cur2.next;
}
}
}
// 如何判定当前哪个链表到达结尾, 哪个链表还有剩余?
if (cur1 == null){
// cur2 还有剩余
newTail.next = cur2;
}else {
//cur1 还有剩余
newTail.next = cur1;
}
return newHead;
}
**方案二:创建傀儡节点**
//5.将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。(重点)
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode newHead = new ListNode(-1);
ListNode newTail = newHead;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
newTail.next = l1;
l1 = l1.next;
newTail = newTail.next;
} else {
newTail.next = l2;
l2 = l2.next;
newTail = newTail.next;
}
}
if (l1 != null) {
newTail.next = l1;
}
if (l2 != null) {
newTail.next = l2;
}
return newHead.next;
}
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
最新推荐文章于 2022-12-19 18:02:16 发布