剑指Offer——有序链表的合并

来源:互联网 发布:windows 7默认壁纸 编辑:程序博客网 时间:2024/06/03 22:05

题目:将两个递增的单链表合并成一个递增的单链表

可以用递归和循环两种方法实现。

//剑指Offer:两个递增的单链表,合并成一个递增的单链表#include <iostream>using namespace std;struct ListNode{    int val;    ListNode *next;};//方法一:递归,另建一个新的链表,存储值ListNode *Merge1(ListNode *phead1,ListNode *phead2){    //鲁棒性检查,防止程序访问到NULL指针,出现崩溃    if(phead1==NULL)        return phead2;    if(phead2==NULL)        return phead1;    ListNode *phead;    if(phead1->val>phead2->val)    {        phead=phead2;        phead->next=Merge1(phead1,phead2->next);    }    else    {        phead=phead1;        phead->next=Merge1(phead1->next,phead2);    }    return phead;}
//方法二:循环法,将链表2插入到链表1中ListNode *Merge2(ListNode *phead1,ListNode *phead2){    ListNode *p,*r,*q,*s;    p=phead1;  r=p->next;    q=phead2->next; s=q->next;//当链表2的节点插入后,保存后继节点。    while(r!=NULL&&q!=NULL)    {       if(r->val<=q->val)       {           p=r;           r=r->next;       }else       {         q->next=p->next;         p->next=q;//将q指向节点插到p         p=q;         q=s;         s=s->next;       }    }    if(r==NULL) p->next=q;    return p;}



0 0
原创粉丝点击