给你一个链表L和另一个链表P,它们包含以升序排列的整数。操作PrintLots(L,P)将打印那些由P所指定位置上的元素。例如,如果p = 1,3,4,6,那么,L中的第1,3,4,6个元素被打印出来。写出PrintLots(L,P)。
题目出自数据结构与算法分析——C语言描述 Mark Allen Weiss 著 冯舜玺 译
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct Node{
int num;
struct Node *next;
};
typedef struct Node * List;
List create()/*创建链表*/
{
List phead = (List)malloc(sizeof(struct Node));
phead->next = NULL;
int lenth,number;
List PTlie = phead;
scanf("%d",&lenth);
for(int i = 0; i < lenth; i++)
{
List pnew = (List)malloc(sizeof(struct Node));
scanf("%d",&number);
pnew->num = number;
pnew->next = NULL;
PTlie->next = pnew;
PTlie = pnew;
}
return phead;
}
void PrintLots(List L,List P)
{
L = L->next;/*从头结点的下一个结点开始*/
P = P->next;
int i = 1;/*用i记录链表L结点的位置*/
while(P != NULL)
{
while(i != P->num)/*如果 i == p->num,说明找到了链表L第i个元素 */
{
L = L->next;
i++;
}
if(L == NULL) break;
printf("%d ",L->num);
P = P->next;
}
}
int main(void)
{
printf("L_list:\n");
List L_list = create();
printf("P_list:\n");
List P_list = create();
PrintLots(L_list,P_list);
return 0;
}