【问题描述】 求出循环链表中后K个元素的和
【样例输入】 8
15 -16 17 18 -19 0 25 11
3
【样例输出】 36
【样例说明】循环链表长度为8,第二行依次输入8元素,需要统计该链表中后3个元素的和
【运行结果如下】
【代码如下】
扫描二维码关注公众号,回复:
13345629 查看本文章
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int ElemType;
/*线性表的单链表存储结构 */
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/*初始化循环单链表*/
int InitList_L(LinkList &L)
{
LinkList p;
LinkList pre;
int i;
int n;
scanf ("%d",&n);
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
pre = L; //当前指针
for (i=0; i<n; i++){
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
pre->next = p;
p->next = NULL;
pre = pre->next; //当前指针后移
}
pre->next = L; //完成循环链表
return n; //返回链表的长度
}
/*遍历链表*/
void TraverseList_L(LinkList &L){
int m;
int len;
int i = 0;
int sum = 0;
LinkList pre;
len = InitList_L(L); //初始化链表并获取链表长度
pre = L; //指针pre指向头结点
scanf("%d",&m);
while (i <= (len-m)){ //指针pre移动到倒数第m个位置
pre = pre->next;
i++;
}
while (pre != L) {
sum = sum + pre->data;
pre = pre->next;
}
printf("%d",sum);
}
int main()
{
LinkList L;
TraverseList_L(L); //遍历链表
return 0;
}
本文章仅供学习和参考!
欢迎交流~