6-7相互要求リストのm番目の要素(20分)
(直鎖テーブルが記憶され、リストの前提を変更することなく、Mの逆数を可能時間と空間の効率的なアルゴリズムを設計してください要素>)。
関数インタフェースの定義:
ElementType Find( List L, int m );
ここでList
、以下のような構造が定義されています。
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L
単一のリードノードリストを与えている;関数Find
にL
最後から二番目のm
要素が返され、元のリストは変更されません。この要素が存在しない場合は、エラーフラグを返しますERROR
。
審判のテストプログラムの例:
#include <stdio.h>
#include <stdlib.h>
#define ERROR -1
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */
ElementType Find( List L, int m );
int main()
{
List L;
int m;
L = Read();
scanf("%d", &m);
printf("%d\n", Find(L,m));
Print(L);
return 0;
}
/* 你的代码将被嵌在这里 */
サンプル入力:
5
1 2 4 5 6
3
出力例:
4
1 2 4 5 6
ElementTypeは、(リストL、検索INT M){ リストP1、P2と、 P1 = L-> 次に、 P2 = L-> 次に、 int型私は= 0を。 INTフラグ= 0 。 以下のための(iは= 0 ; I <M I ++ ) { 場合(P2 == NULL) { フラグ = 1 。 休憩; } P2 = P2-> 次に、 } であれば(フラグ!= 1 ) { 一方(P2) { P1 = P1-> 次に、 P2 = P2-> 次に、 } 戻り P1-> データ。 } それ以外 の戻りERROR; }