チェーンテーブルの練習問題
1159 ワード
ループチェーンテーブルの長さが1より大きく、テーブルにヘッダノードもヘッダポインタもないと仮定します.Sはチェーンテーブル内のノードを指すポインタであることが知られている.チェーンテーブルにおいてポインタSが指すノードの前駆ノードを削除するアルゴリズムの作成を試みる
#include
#include
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LNode,*LinkList;
LinkList delete_PreNode(LinkList node)
{
if(node==NULL)
return NULL;
else if(node->next==NULL)
{
return node;
}else
{
LinkList p=node;
LinkList q;
while(p->next!=node)
{
q=p;
p=p->next;
}
q->next=p->next;
free(p);
}
return node;
}
void print(LinkList node)
{
LinkList m=node;
do{
printf("%d\t",m->data);
m=m->next;
}while(m!=node);
}
int main()
{
LNode n1,n2,n3,n4,n5;
n1.data=1;
n2.data=2;
n3.data=3;
n4.data=4;
n5.data=5;
n1.next=&n2;
n2.next=&n3;
n3.next=&n4;
n4.next=&n5;
n5.next=&n1;
print(&n1);
getchar();
delete_PreNode(&n3);
print(&n1);
getchar();
}