首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

合并有序链表

如A->C->E与B->D->F,第一步,若A最小,那么我这个时候用new_list代替A,那么它的下一个节点必然是其他节点中值最小的。...以此类推,等递归到最后一层的时候,每次返回必然会自然而然的承接上自己的头结点,递归结束后的new_list便指向新链表的头结点的地址。...不用递归的话要先手判断,两个链表的头结点的值,取其中小的,用两个变量进行存储。为什么要两个,因为一个用于循环是一层层往下面加节点,一个用于返回,不然你循环完了,却又给不出头结点,那不就废了嘛。...            System.out.println(end.val);             end = end.next;         }     }     /**      * 使用递归的方式进行合并两个列表...new_list.next = mergeTwoLists2(l1, l2.next);         }         return new_list;     }     /**      * 使用循环的方式进行合并两个列表

18720
您找到你想要的搜索结果了吗?
是的
没有找到

C语言每日一题(29)合并两个有序链表

力扣网 21合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。...示例 思路分析 最基本的一种思路就是,遍历两个链表,将对应结点的值进行比较,题目要求是要升序排序,即较小的值先排在前面,随后所在链表的较小结点先走,将后面的值于第二个链表的结点进行比较,即谁小谁先排,谁小谁先动...需要注意的是: 会存在比较存放完后,其中一个链表会有剩余,此时不需要再进行比较,直接进行存放即可。...tail=tail->next; cur1=cur1->next; } } if(cur1==NULL)//判断是否存在任一链表有剩余的情况

8110

4 合并有序链表

本文涉及知识点  哨兵结点的运用 链表数据结构中哨兵的作用在之前详细阐述了[leetcode链表系列]2 删除链表中的节点,忘记了的小伙伴复习后再看效果一定翻倍哟!...1 Leetcode21 合并有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。...01 题目解析 思路 为了方便返回合并后的链表,我们使用head为头结点,p1,p2分别跟踪两链表L1,L2.如下图。 ? 如果p1当前值小于p2的值,我们就将p1的值直接连接在pre后面并移动p1。...循环结束的时候,如果有一个链表非空,因为两链表有序,将其合并到另个链表即可。 今天小蓝没有把具体完整的画出来,想着做了一个带bgm的动画,大家可以放松放松的看看。...02 代码实现 1 c++版本 ? 2 python版本 ? 3 java版本 ?

41020

合并两个有序链表

合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。...[1,1,2,3,4,4] 输入:l1 = [], l2 = [] 输出:[] 输入:l1 = [], l2 = [0] 输出:[0] 思路 使用双指针思想解题 首先定义两个指针p1,p2分别指向两个有序链表的头结点...每一次循环都比较两个指针指向节点的值,将偏小的节点加到新链表中(若相等则将p2加到新链表中),且较小的链表上的指针往后移动一位。 当p1、p2任意next节点为空时,将非空节点加到新链表中。...7.同步骤4 循环执行,直到一方指针为空跳出循环 将非空指针指向的节点加到已排序的链表里,此时返回ptmp->next即为合并后的链表 代码 /** * Definition for singly-linked...->将原链表指针向后移动->将新链表指针向后移动 当循环结束后,把原链表非空指针指向的节点加到已排序的链表中即可,返回虚拟头结点的next节点,即可得到合并后的有序链表

14120

合并两个有序链表

已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。结果链表要包含head1和head2的所有节点,即使节点值相同。 注意:不能开辟新空间来存储合并后的链表。...如果第一次做该题,很容易会想到使用新链表来存储合并后的有序链表。虽然可以如此实现,但是不符合常规解法和面试官的要求。...2.非递归实现 算法过程: 输入:两个有序的单链表head1与head2; 输出:合并后的有序链表mergeHead; 算法描述: (1)如果head1或head2为空链表,则直接返回另外一个链表...7 8 ss1 strIn:3 4 5 6 7 8 合并链表: 1 2 3 3 4 5 5 6 7 8 3.递归实现 从上面合并两个有序链表的步骤中可以看出,每次合并的步骤(2)都是一样的,由此我们想到了递归...+算法之 合并两个有序链表

2.2K21

合并两个有序链表

合并两个有序链表,使得合并后的结果仍然是有序的,直观的做法就是从两个链表的首节点开始比较,将其中小的那个链接到新链表之中,(如果不想破坏原链表,那么需要将该节点拷贝一份,然后链接到新链表之中。)...void Print(List L); //遍历链表 List Merge(List L1, List L2); //合并链表 int main() { List L1, L2, L; /.../构造L1和L2链表 L1 = Read(); L2 = Read(); //合并L1和L2链表 L = Merge(L1, L2); //合并后的结果 Print(L); printf(...} } if (NULL == p1) { p3->Next = p2; } if (NULL == p2) { p3->Next = p1; } //此处在原节点的基础上合并两个链表...,破坏掉了原链表,使得原链表为空 L1->Next = NULL; L2->Next = NULL; //返回新链表的头指针 return p; } 这种使用双指针的方法,不止在合并链表的时候会用到

5.1K20

合并两个有序链表

合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 ?...,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。...由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。...这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可 /** * Definition for singly-linked list....l2 : l1 return listNode.next }; 解法二:递归 思路:如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表

1.3K30

合并两个有序链表

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。...具体操作如下: 1、由于需要对比两个链表的头节点,为了让两个原链表的头节点的地位与其它节点的地位一样,避免做其它额外的判断处理,这里设定一个虚拟头节点 dummy ,方便后续返回合并后的链表 2、维护一个...7、跳出循环后,l1 或者 l2 中可能有剩余的节点没有被观察过,直接把剩下的节点加入到 pre 的 next 指针位置就行,因为 l1 和 l2 都是有序的,所以不管哪个链表有剩余的节点没有被观察过,...它包含的所有元素都比前面已经合并链表中的所有元素都要大。...pre.next = l2; } // 最后返回虚拟节点的 next 指针 return dummy.next; } } 2、C+

1.4K80

合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。...示例 1: c++代码: 思路1:开辟一个新链表用来存放新的合并后的升序链表,每一次从l1和l2链表分别取出来一个节点,判断两个节点的值哪一个大,大的节点跟在小的节点后面,小的节点尾插到新链表后面...,并且还有判断l1和l2哪个链表长度更长,当出现一个链表遍历完后,另一个链表剩余部分就直接尾插到新链表后面 #include using namespace std; struct...ListNode* newList = new ListNode();//该链表用来存放整合后的数据 ListNode* end = newList;//指向当前链表尾节点...<< "请为l2链表赋值:" << endl; input(l2); cout << "输出l2链表: " << endl; display(l2); cout <<

1.1K30
领券