码迷,mamicode.com
首页 > 其他好文 > 详细

习题3.2

时间:2015-07-05 07:02:46      阅读:96      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!