首页 > 其他 > 详细

习题3.2

时间:2015-07-05 07:01:17      阅读:277      评论:0      收藏:0      [点我收藏+]
技术分享
#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *ptrToNode ;
typedef struct PtrToNode List;
typedef struct PtrToNode Position;

struct Node{
    ElementType Ele;
    PtrToNode Next;
};

void
PrintLots(List L, List p)
{
    int bef = 0;
    ElementType Tmp;
    Position ptr1,Ptr2;
    Ptr1 = p; Ptr2 = L;
    while( Ptr1->Next != NULL )
    {
        int i;
        Tmp = Ptr1->Next->Ele;
        for( i = 0; i < Tmp - bef; i++)
        {
            Ptr2 = Ptr2->Next;
        }
        printf("%d",Ptr2->Ele);
        Ptr1 = Ptr1->Next;
        bef = Tmp;
    }
}
View Code

运行时间为O(m+n),,m,n分别为两个链表的元素个数,以上是个人算法,没有用到Next和first

下面是标准答案(逻辑性强,信息量大

技术分享
void
PrintLots( List L, List P )
{
    Position Ppos,Lpos;
    Ppos = First(P); Lpos =First(L);
    int counter = 1;
    while( Ppos != NULL && Lpos != NULL )
    {
        if( Ppos->Ele == couter++)//counter的值和Lpos所指向位置的序数相等
        {
            Ppos = next( Ppos, P );
            printf("%?",Lpos->Ele);
        }
        Lpos = next( Lpos,L );
    }
}
View Code

模型建造:上面一排P链表

     下面一排L链表

Ppos和Lpos分别指向两链表的头结点

除非指向L中相应的位置,否则绝不挪动Ppos指针

有趣的是counter++后的值与指向L中结点的序号相同

习题3.2

原文:http://www.cnblogs.com/gabygoole/p/4621549.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!