#代码是直接从提交的答题卡上复制的,大概格式啥有错
#运行效果其时要求用自己的姓名就不粘过来了
题目:
1、(30分)使用自己的姓名拼音字母创建一个单链表(带头结点),注意,如果链表存在已知字母,则不能插入。输入格式样例:
请输入姓名:LIMING
创建的单链表输出为:L->I->M->N->G->^
注:
(1)输入自己姓名拼音,大写全拼,中间无空格;
(2)如果链表长度小于5(不含),则在单链表尾部,反复插入单个字母A,直到链表长度即是5为止。
2、在1所创建的单链表底子上,采取两种方法实现如下功能:查找单链表倒数第2个元素,并输出元素值。
(1)(30分)第一种方法(通例思路):求出单链表长度(Length),然后通过idx = Length-N+1(N为倒数位置序号),得到idx值,再重新遍历单链表,直到遍历到idx即可。
对应实现函数void GetReverseValue1(LinkList L,int n,char &value)//value为返回的查找元素值
(2)(40分)第二种方法:要求不能采取第一种方法的思路(第一种方法需采取两次遍历,即一次用于求单链表长度,别的一次用于查找idx),且仅采取一次遍历即可得到倒数第2个元素的值。
对应实现函数void GetReverseValue2(LinkList L,int n,char &value)//value为返回的查找元素值
最终输出样式为(以LIMING为例):
第一种方法(通例思路)单链表倒数第2个元素值为:N
第二种方法单链表倒数第2个元素值为:N
1.源码:
[code]#includeusing namespace std;typedef struct Lnode { char data; struct Lnode* next;}Lnode,*Linklist;//创建单链表bool initlist(Linklist& L,string n) { Linklist p,s; L = new Lnode; L->next = NULL; p = L; for (char i : n) { s = new Lnode; s->data = i; p->next = s; p = p->next; } p->next = NULL; return true;}//显示单链表void display(Linklist L) { Linklist p=L->next; while (p!= NULL) { cout data next; } cout next; } //盘算序号 int idx; idx = len - n + 1; //查找元素 p = L; for (int i = 0; i < idx; i++) { p = p->next; } value = p->data;}void GetReverseValue2(Linklist L, int n, char& value) { Linklist p = L, s = L; //s指针先移动k步 for (int i = 0; i < n; i++) { s = s->next; } //一次遍历 while (s != NULL) { s = s->next; p = p->next; } value = p->data;}int main() { Linklist L; string name; char value1,value2; cout > name; if (initlist(L, name)) { cout |