必须要有两个 .h文件 和一个 .cpp文件,一个定义,一个实现,一个解决问题;
LinkedList.h

#ifndef LINKEDLIST_H_
#define LINKEDLIST_H_
#include <iostream>
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int status;
typedef  struct  LNode
{ElemType data;//数据域LNode *next;//指针域
} LNode, *LinkList;//定义结点和链表status CreatLkList(LinkList &L, int n);             //前插法创建n个元素的链表
status InsertLkList(LinkList &L, int i, ElemType e);//在第i个位置插入元素e
status DeleteLkList(LinkList &L, int i);            //删除第i个元素
status DeleteLkList(LinkList &L, ElemType mmin, ElemType mmax);//删除区间(mmin,mmax)的元素
status DestoryLkList(LinkList &L);                  //销毁链表
int FindOrInsert(LinkList &L, ElemType x);          //查找元素返回位序没有将其插入合适位置
LNode* reverseList(LinkList &L, int flag);          //递归反转链表
// std::ostream& operator<<(std::ostream& os, LinkList L);    //重载<<打印链表
#endif // !LINKEDLIST

SingleLinkedList.h

#include "LinkedList.h"
using namespace std;status CreatLkList(LinkList &L, string s) //前插法创建,顺序与输入顺序相反
{L = new LNode; //创建头结点L->next = NULL;int len = s.size();for (int i = len; i >= 0; i--){LNode *p = new LNode;p->data = s[i];p->next = L->next;L->next = p;}// LNode *t = L->next;// while (t)// {//     t = t->next;// }L = L->next;return OK;
}status InsertLkList(LinkList &L, int i, ElemType e)
{LNode *p = L;int j = 0;//i的合法范围为1~L.length+1while (p && j < i - 1) //定位到第i-1个结点{p = p->next;j++;}if (!p || j > i - 1) //i>L.length或i<1return ERROR;LNode *t = new LNode; //创建新结点t->data = e;t->next = p->next;p->next = t; //插入到第i-1个后面return OK;
}status DeleteLkList(LinkList &L, int i)
{LNode *p = L;int j = 0;//i的合法范围为1~L.lengthwhile (p->next && j < i - 1){p = p->next;j++;}if (!p->next || j > i - 1) //i>L.length+1或i<1{cout << "\nThe value of i is out of bounds!\n";return ERROR;}LNode *t = p->next; //临时保存被删结点p->next = t->next;delete t;return OK;
}status DeleteLkList(LinkList &L, ElemType mmin, ElemType mmax)
{LNode *pre = L;                 //初始头节点,修改前驱LNode *now = pre->next;         //当前工作指针LNode *t;                       //临时缓存while (now && now->data < mmax) //因升序,大于mmax提前跳出{if (now->data > mmin && now->data < mmax){t = now;now = now->next;pre->next = now;delete t;}else{pre = pre->next;now = now->next;}}return OK;
}status DestoryLkList(LinkList &L)
{LNode *t;while (L){t = L; //保存头节点L = L->next;delete t;}cout << "\nThe LinkList is Destoryed!\n";return OK;
}
int FindOrInsert(LinkList &L, ElemType x)
{int i = 0;LNode *pre = L;LNode *now = pre->next;while (now && now->data <= x){if (now->data == x) //找到返回位序return i;now = now->next;pre = pre->next;i++;}LNode *t = new LNode;t->data = x;t->next = now;pre->next = t;cout << "未找到 " << x << " 将其插入成功!\n";return 0; //失败返回位序0
}LNode *reverseList(LinkList &L, int flag) //flag当前是否指向头结点标签
{if (!L->next || (!L->next->next && flag == 1)) //空表或一个元素return NULL;if (!L->next->next) //递归出口,L指向倒数第2个结点{LNode *tair = L->next; //保存尾结点tair->next = L;L->next = NULL;return tair; //返回尾节点}else{LNode *tair = reverseList(L->next, 0);if (flag) //L指向头结点{L->next->next = NULL; //原首元结点指向空L->next = tair;       //头结点指向原尾结点}else //指向L指向首元结点到倒数第3个结点{L->next->next = L;L->next = NULL;}return tair;}
}// ostream &operator<<(ostream &os, LinkList L)
// {//     LNode *p = L->next;
//     if (!p)
//     {//         os << "The empty LinkedList" << endl;
//         return os;
//     }
//     cout << "L->";
//     while (p)
//     {//         os << p->data << "->";
//         p = p->next;
//     }
//     os << "NULL";
//     return os;
// }

main.cpp

#include "SingleLinkedList.h"
#include <iostream>
using namespace std;int main()
{LinkList L;string s;cin >> s;CreatLkList(L, s);int len = s.size();int i = len - 1;while (L && i >= 0){if (L->data != s[i]){cout << "no" << endl;return 0;}L = L->next;i--;}if (L->next == NULL && i == -1){cout << "yes" << endl;return 0;}else{cout << "no" << endl;return 0;}
}

说实话,这根本不需要ADT做什么事,但老师非要三个文件;

数据结构与算法 实验二:利用单链表(实现ADT)判断回文相关推荐

  1. 数据结构与算法(二)单链表(Singly linked list)

    数据结构与算法(二)单链表(Singly linked list) 链表(Linked list) Python完整功能实现 LeetCode思想实践: 链这个东西大家一定都不陌生, 脖子上有项链, ...

  2. 【Java数据结构与算法】第二章 单链表及简单面试题

    第二章 单链表 文章目录 第二章 单链表 一.单链表 1.基本介绍 2.思路 3.代码实现 二.简单面试题 1.求单链表中有效节点的个数 2.查找单链表中的倒数第k个节点(新浪面试题) 3.单链表的反 ...

  3. 【数据结构与算法】带环单链表查找环的入口算法

    带环单链表的故事 @不了解前尘往事的Reader,烦请阅读--<判断单链表是否有环的算法> 如何找带环单链表的环的入口 这里只说比较可行的算法吧. 思路一:HashSet第一个重复元素就是 ...

  4. Java数据结构与算法———(8)单链表应用实例,删除节点,根据输入的整数

    在单链表中,根据输入的节点编号删除对应的节点 一.代码 import java.util.Scanner;public class SingleLinkedListDemo {public stati ...

  5. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

  6. Java数据结构和算法:数组、单链表、双链表

    1. 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的 ...

  7. c语言实现单链表数据结构,数据结构与算法-C语言实现单链表,以及单链表的常用方法...

    C语言知识点提要: Struct:Struct 内可放置各种类型的数据 格式为: Struct TagName { .............(元素类型 元素名称) } 不同Struct内的成员名称可 ...

  8. (数据结构与算法)数组和单链表实现栈的基本操作

    数组实现栈 栈接口 public interface Stack<E> {int getSize();boolean isEmpty();void push(E e);E pop();E ...

  9. 数据结构与算法之Python实现——单链表

最新文章

  1. 【vijos】P1448 校门外的树
  2. php源码中如何添加滚动公告,如何给WordPress网站添加滚动公告?
  3. Scrapy Django项目
  4. python高级应用_Python高级编程技巧
  5. Tornado帮助文档组织(zt)
  6. jquery页面跳转带cookie_搭建谷歌浏览器无头模式抓取页面服务,laravelgt;phpgt;pythongt;docker...
  7. android系统性能优化(13)---Android性能优化典范 - 第1季
  8. 学python买什么书-想学python看哪些书
  9. SAP打印脱机请求和输出请求管理
  10. 公里导线时有没有计算机类计算方法,基于Matlab的导线网坐标计算. (1).doc
  11. python一百行代码的项目_用python一百行代码实现xss扫描工具
  12. 网络安全笔记(一)网络安全设备
  13. 迅捷pdf编辑器是如何编辑pdf文件的
  14. Android代码修改SIM的PIN码,关于设置SIM卡PIN码及查询PUK码的教程
  15. datax底层原理_Datax 任务分配原理
  16. Linux 监控网络流量
  17. DxO FilmPack破解版|DxO FilmPack Elite 5.5.23破解版下载(附破解补丁)
  18. Java实现机器人用户随机上线
  19. 【自然语言处理-2】word2vec词嵌入算法“男人”+“女人”=“爱情的坟墓”
  20. ubuntu18 编译maplab opencv3_catkin 时出现Flow control statements are not properly nested.

热门文章

  1. Java内存溢出异常(下)
  2. Maven学习(三)-----Maven本地资源库
  3. 5、UmbracoNewsSite:添加css和js文件
  4. 做购物车系统时利用到得几个存储过程
  5. mpvue构建小程序(步骤+地址)
  6. .Net实现发送邮件功能
  7. JavaScript.Remove
  8. 最短路 + 搜索 + 剪枝 之 hdu 4848 Wow! Such Conquering!
  9. 使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)
  10. leetcode Distinct Subsequences