小白算法积累——单链表26#中心对称判断

题目:设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型。试设计算法判断该链表的全部n个字符是否中心对称。例如xyx,xyyx,都是中心对称。
关键字:单链表+中心对称判断

思路
使用栈来判断链表中的数据是否中心对称。
原理:
栈是先进后出,所以前一半链表中元素可以实行“逆置输出”,此时和后一半元素进行比较,可以判断中心对称性

1)让链表的前一半元素一次进栈。
需要变量:
链表L,链表的长度n,遍历工作指针p;
字符栈S[n/2], 进栈小助手 i ;

2)在处理链表的后一半元素时,
当访问到链表的一个元素后,就从栈中弹出一个元素,两个元素进行比较

3)从单链表前后两段中依次各取一个结点,按要求重排。

int dc(LinkList L,int n){//L是带头结点的n个元素单链表,本算法判断链表是否是中心对称
  int i;
  char s[n/2];//s字符栈
  p=L->next;//p是链表的工作指针,指向待处理的当前元素
  for(i=0;i<n/2;i++){//链表前一半元素进栈
     s[i]=p->data;
     p=p->next;
     }
  i--;//恢复最后的i值
  if(n%2==1)//若n是奇数,后移一位,移过中心结点
     p=p->next;
  while(p!=NULL&&s[i]==p->data){//检测是否中心对称
     i--;//i充当栈顶指针
     p=p->next;
  }
  if(i==-1)//此时栈为空栈,说明所有后半链表中的元素都满足对称要求
     return 1;//链表中心对称
  else
     return 0;//链表不中心对称
}

   
  
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值