合并两个排序的链表
题目
思路
使用递归的方法
-
终止条件:一个链表为空,直接返回另外一个链表
-
返回值:返回拼接好的子链表
-
本级任务:判断得到值较小的节点,传入该节点的后继与另外一个链表进行合并,再将本次的节点接在后面拼好的结果前面
步骤
- 每次比较两个链表当前节点的值,然后取较小值的链表指针往后,另一个不变,两段子链表作为新的链表送入递归中。
- 递归回来的结果我们要加在当前较小值的节点后面,相当于不断在较小值后面添加节点
代码
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
public ListNode Merge (ListNode pHead1, ListNode pHead2) {
// write code here
if (pHead1 == null) {
return pHead2;
}
if (pHead2 == null) {
return pHead1;
}
if (pHead1.val <= pHead2.val) {
pHead1.next = Merge(pHead1.next, pHead2);
return pHead1;
}
else {
pHead2.next = Merge(pHead1, pHead2.next);
return pHead2;
}
}
}
总结:
链表和树的题先思考有没有重复的情况,先考虑使用==递归==来解题
递归的模板
- 结束条件
- 本级任务
- 返回值