问题描述 :
设带头结点的单链表的头指针为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
思路
- 找到前m个结点的中点
- 逆置后半段
- 从两段的第一个结点开始依次比较
注意事项:如果m大于链表长度,直接让m=n
代码
#include <iostream>
using namespace std;
struct ListNode
{
int data;
ListNode *next;
};
//从键盘读入数据创建链表,新结点插入到尾部
ListNode *createByTail(int n)
{
ListNode