用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

两个有序链表序列的交集

2017-10-03 作者:芙蓉妹妹举报

[c++]代码库

#include<iostream>
using namespace std;
typedef int  ElemType; //假设线性表中的元素均为整型

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode,*LinkList;

void ListCreate_L(LinkList &L)
{
    LNode *rearPtr,*curPtr;   //一个尾指针,一个指向新节点的指针
    L=new LNode;
    L->next=NULL;//先建立一个带头结点的单链表
    rearPtr=L;  //初始时头结点为尾节点,rearPtr指向尾巴节点
    int a;
    cin>>a;
    while(a!=-1)
    {
        //每次循环都开辟一个新节点,并把新节点拼到尾节点后
        curPtr= new LNode;//生成新结点
        curPtr->data=a;//输入元素值
        curPtr->next=NULL;  //最后一个节点的next赋空
        rearPtr->next=curPtr;
        rearPtr=curPtr;
        cin>>a;
    }
}
void ListReverse_L(LinkList &L1,LinkList &L2,LinkList &L)
{
    LNode *p1,*p2,*r,*p;
    r=L;//尾指针r指向头结点
    p1=L1->next;//p1遍历表1
    p2=L2->next;//p2遍历表2
    while(p1&&p2)
    {
        if((p1->data)<(p2->data))//若p1的数值更小,则p1指向后一个
            p1=p1->next;
        else if((p1->data)>(p2->data))
            p2=p2->next;
        else//数据相等时,存入L里
        {
            p=new LNode;
            p->data=p1->data;
            p->next=NULL;
            r->next=p;
            r=p;
            p1=p1->next;
            p2=p2->next;
        }
    }
}
void ListPrint_L(LinkList &L)
{
//输出单链表
    LNode *p=L->next;  //p指向第一个元素结点
    if(p==NULL)
        cout<<"NULL";
    else
    {
        while(p!=NULL)
        {
            if(p->next!=NULL)
                cout<<p->data<<" ";
            else
                cout<<p->data;
            p=p->next;
        }
    }
}
int main()
{
    LinkList L1,L2,L;
    ListCreate_L(L1);
    ListCreate_L(L2);
    L=new LNode;
    L->next=NULL;
    ListReverse_L(L1,L2,L);
    ListPrint_L(L);
    return 0;
}


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。