AcWing34:合并两个排序的链表
Posted 劭兮劭兮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing34:合并两个排序的链表相关的知识,希望对你有一定的参考价值。
问题
原题链接:合并两个排序的链表
解决办法
(二路归并) O(n)
- 新建虚拟头结点dummy,设置current指针指向dummy,current 指针负责记录当前已经确定位置的元素;
- 若当前 current1 指针指向的结点的值val比 current2 指针指向的结点的值val小,则令 current 的next指针指向 current1,且 current1 后移;
注意:current 的位置也需要后移;因为目前又有一位结点的位置已经确定;
- 否则指向 current2 ,且 current2 后移。
注意:current 的位置也需要后移;因为目前又有一位结点的位置已经确定;
- 循环到 current1 为空,或者 current2 为空
- 如果 current1 为空,则将 current.next = current2;如果 current2 为空,则将 current.next = current1;
- 最终结果图
JAVA代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode merge(ListNode l1, ListNode l2) {
if(l1 == null) {
return l2;
}
if(l2 == null) {
return l1;
}
// 创建虚拟头结点
ListNode dummy = new ListNode(0);
// 用来记录当前指针
ListNode current = dummy;
ListNode current1 = l1;
ListNode current2 = l2;
while(current1 != null && current2 != null) {
if(current1.val <= current2.val) {
current.next = current1;
current1 = current1.next;
}else {
current.next = current2;
current2 = current2.next;
}
// current需要继续往下移动
current = current.next;
}
if(current1 == null) {
current.next = current2;
}else {
current.next = current1;
}
return dummy.next;
}
}
小记:
原题链接:合并两个排序的链表
以上是关于AcWing34:合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章