zoukankan      html  css  js  c++  java
  • 剑指OFFER——合并两个有序的链表

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    再做这道题就是想不起来书上怎么做的了,但是最近看STL里面全是这种基础的合并啊,比较啊。就算不会也看会了。

    循环我用了4个指针。p和q分别指向两个链表当前需要比较的元素,l和k分别代表“新”的链表的旧节点和新节点,防止断了。

    每次新比较的结果给k,l代表之前的节点。

    循环:

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
        {
            if(pHead1==NULL||pHead2==NULL){
                if(pHead2==NULL)
                    return pHead1;
                else return pHead2;}
            ListNode *p=pHead1,*q=pHead2;
            pHead1= pHead1->val<pHead2->val? pHead1:pHead2;
            ListNode *k=pHead1,*l=pHead1;
            while(p!=NULL&&q!=NULL){
                if(p->val < q->val){
                    k=p;
                    p=p->next;
                }
                else {
                    k=q;
                    q=q->next;
                }
                l->next=k;
                l=k;
            }
            if(q==NULL)
                l->next=p;
            if(p==NULL)
                l->next=q;
            return pHead1;
        }
    };

    递归:

    public class Solution {
     public ListNode Merge(ListNode list1, ListNode list2) {
     if(list1==null)
     return list2;
     else if(list2==null)
     return list1;
     ListNode mergeHead=null;
     if(list1.val<list2.val){
     mergeHead=list1;
     mergeHead.next=Merge(list1.next, list2);
     }
     else{
     mergeHead=list2;
     mergeHead.next=Merge(list1, list2.next);
     }
     return mergeHead;
     
     }
    }
  • 相关阅读:
    m-n的随机整数 包括m n
    获取url参数 hash类型
    js 数组转带空格字符串
    产生n-m的随机数组
    js 判断android、IOS
    判断是否微信浏览器
    文本左右对齐方式css
    H5微信支付流程
    H5微信授权登录流程
    H5页面 input禁止弹出键盘
  • 原文地址:https://www.cnblogs.com/LUO77/p/5388089.html
Copyright © 2011-2022 走看看