#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int type;
typedef struct lnode //定义链表结点的数据结构
{
int data;
struct lnode *next;
}Lnode;
typedef Lnode node;
typedef struct dnode//定义双链表结点的数据结构
{
int data;
struct dnode *lnext;
struct dnode *rnext;
}Dnode;
bool issymmetry17(Dnode *h)//此函数只能判断以头结点为划分两边是否对称,如果一个不带头结点的双循环链表将一个头结点再任意插进某位置则失效
{ //基于此改进的方法是,从头结点开始向右遍历,找到一个和其rnext值相等的节点并记录此节点,其分别向左向右依次对
//比如果对比指针相遇则对比成功,如果在对比过程中遇见头结点则要跳过,如果没有相遇且对比失败则从记录的点再次寻找满足和rnext值相等的节点
//当此过程寻找到h的lnext时它的rnext应该为其rnext的rnext; 当所有对比失败并且回到h时则整个判断过程失败
Dnode *lnode = h->lnext;
Dnode *rnode = h->rnext;
while (!(lnode == rnode || lnode->lnext == rnode))
{
if (lnode->data != rnode->data)
return false;
lnode = lnode->lnext;
rnode = rnode->rnext;
}
return true;
}