2021-11-07 循环链表中后k个元素的和

【问题描述】 求出循环链表中后K个元素的和


【样例输入】   8

                        15  -16 17 18  -19 0 25 11

                        3
 

【样例输出】 36

                        
【样例说明】循环链表长度为8,第二行依次输入8元素,需要统计该链表中后3个元素的和

【运行结果如下】

【代码如下】

#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;
}


本文章仅供学习和参考!

欢迎交流~ 

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121190796