-->
当前位置:首页 > 题库 > 正文内容

函数题:判断链表结点对称

Luz3年前 (2021-05-10)题库483
设计算法,判断带头结点的循环双向链表中的数据结点是否对称。
如果对称,输出“yes”
如果不对称,输出“no”
链表空则输出“NULL”

### 链表结构及操作函数接口定义:
```c++

typedef char ElemType;
typedef struct DNode //定义循环双链表结点类型
{
ElemType data;
struct DNode *prior,*next;
} DLinkNode;
void InitList(DLinkNode *&L); //初始化一个空的带头节点的双向循环链表 裁判程序实现,略去不表
void DestroyList(DLinkNode *&L); // 销毁链表 裁判程序实现,略去不表
bool ListInsert(DLinkNode *&L,int i,ElemType e); // 在链表第i个节点处插入元素为e的节点 。裁判程序实现,略去不表。

void DispList(DLinkNode *L); // 正向顺序输出链表,输出时每个节点元素之间以空格符间隔,以换行符结束。
int Symm(DLinkNode *L); // 判断链表是否对称,对称时返回1,不对称时返回0,链表为空时返回-1。
```

### 裁判测试程序样例:
```c++
#include

void InitList(DLinkNode *&L); //裁判程序实现,略去不表
void DestroyList(DLinkNode *&L); //裁判程序实现,略去不表
bool ListInsert(DLinkNode *&L,int i,ElemType e);//裁判程序实现,略去不表
//要求写出以下函数实现
void DispList(DLinkNode *L);
int Symm(DLinkNode *L);

int main()
{
DLinkNode *h;
ElemType e;
InitList(h);
int i=1;
char ch;
while((ch=getchar())!='\n')
{
ListInsert(h,i,ch);
i++;
}
DispList(h);

if(Symm(h)==1)
printf("yes\n");
else if (Symm(h)==0)printf("no\n");
else printf("NULL\n");
DestroyList(h);
return 0;
}

/* 请在这里填写答案 */
```

### 输入样例:

在这里给出一组输入。例如:

```in
abcxba
```

### 输出样例:

在这里给出相应的输出。例如:

```out
a b c x b a
no
```






答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。