判断单链表的对称性-链表

该算法旨在判断一个带头结点的单链表的前m个结点是否中心对称。首先找到链表的中点,然后逆置后半段,接着比较逆置后的后半段与前半段是否相同来确定对称性。当m超过链表长度时,m取链表长度。示例中,输入链表1 2 3 2 1,m=5,经过处理发现对称,输出T。
摘要由CSDN通过智能技术生成

问题描述 :

设带头结点的单链表的头指针为head,结点结构由data和next两个域构成,其中data域为int型。请设计一个算法判断该链表的前m个结点的data域是否中心对称。例如xx, xyx, xyyx都是中心对称。如果m超过链表的长度,则只需要链表中的数据元素对称即认为对称。

输入说明 :
第一行为链表元素的个数n
第二行输入单链表的数据元素(数据元素之间以空格分隔)
第三行为m

输出说明 :

输出一个字符:
T(表示对称)
F(表示不对称)

输入范例 :

10
1 2 3 2 1 1 2 3 4 5
5

输出范例 :

T

思路

  1. 找到前m个结点的中点
  2. 逆置后半段
  3. 从两段的第一个结点开始依次比较

注意事项:如果m大于链表长度,直接让m=n

代码

#include <iostream>

using namespace std;

struct ListNode
{
   
    int data;
    ListNode *next;
};

//从键盘读入数据创建链表,新结点插入到尾部
ListNode *createByTail(int n)
{
   
    ListNode 
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值