栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指offer—day 12(双指针-2)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer—day 12(双指针-2)

day 12
        • 1.剑指 Offer 25. 合并两个排序的链表【简单】
        • 2.剑指 Offer 52. 两个链表的第一个公共节点【简单】

1.剑指 Offer 25. 合并两个排序的链表【简单】

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

创建新表:

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {  //我的代码居然和孙笑川一模一样也是晦气了
    ListNode *head=new ListNode;  //别人管这个叫dummyHead
    ListNode *l=head;
    
    while(l1!=NULL && l2!=NULL){      //将两个表中较小的结点加入新的表中
        if(l1->valval){
            l->next=l1;
            l1=l1->next;
        }
        else{
            l->next=l2;
            l2=l2->next;
        }
        l=l->next;
    }

    if(l1!=NULL)    //将不是空的链表接上即可
        l->next=l1;
    else
        l->next=l2;
    return head->next;
}

递归:

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {  
    if(l1==NULL)
        return l2;
    if(l2==NULL)
        return l1;
    if(l1->val<=l2->val){
        l1->next=mergeTwoLists(l1->next,l2);
        return l1;
    }
    else{
        l2->next=mergeTwoLists(l1,l2->next);
        return l2;
    }
}

qquad

2.剑指 Offer 52. 两个链表的第一个公共节点【简单】

输入两个链表,找出它们的第一个公共节点。

hash集合:
先把A的结点全部加入unordered_set里面,然后逐一判断B的结点并加入即可…O(n)

 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    if(headA==NULL || headB==NULL)
        return NULL;
    unordered_set visited;
    ListNode *temp=headA;
    while(temp!=NULL){
        visited.insert(temp);  //插入集合中
        temp=temp->next;
    }
    temp=headB;
    while(temp!=NULL){
        if(visited.count(temp))   //若有,count返回1
            return temp;
        temp=temp->next;
    }
    return NULL;
}

浪漫解法:
m,n分别做模m的减法和模n的减法,指定一个数(相遇位置),m和n每次减一,多次以后,m与n会均为这个数,即相遇了?

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    if(headA==NULL || headB==NULL)
        return NULL;
    ListNode *p=headA,*q=headB;
    while(p!=q){
        p= p==NULL?headA:p->next;    //不断地遍历,多遍以后总会相遇
        q= q==NULL?headB:q->next;
    }
    return q;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988553.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号