版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/83352796
单向循环链表定义:
typedef struct node {
int data, sum;
struct node *next;
}LNode;
创建:
//创建链表
LNode* Create( int a[], int len)
{
LNode* L;
//创建头结点
L = (LNode*)malloc(sizeof(LNode));
L->data = a[0];
L->sum = 0;
L->next = L;
LNode *prior, *pcur;
prior = L;
for (int i =1; i < len; i++)
{
pcur = (LNode*)malloc(sizeof(LNode));
pcur->data = a[i];
pcur->sum = 0;
pcur->next = prior->next;
prior->next = pcur;
prior = pcur;
}
return L;
}
打印:
//打印链表
void Print(LNode* L)
{
LNode* p;
p = L->next;
while (p != L)
{
printf("data:%d,sum:%d\n", p->data, p->sum);
p = p->next;
}
//退出循环时,p==L
printf("data:%d,sum:%d\n", p->data, p->sum);
}
求结点sum域值:
void FillSum(LNode* L)
{
int temp;
LNode *p, *q;
p = L->next;
while (p != L)
{
q = p;
p = p->next;
temp = 0;
while (q != p)
{
temp =temp+ p->data;
p = p->next;
}
//退出循环时,p=q
p->sum = temp;
p = p->next;
}
//计算L节点的sum值
p = L->next;
temp = 0;
while (p != L)
{
temp = temp + p->data;
p = p->next;
}
L->sum = temp;
}
测试demo:
int main()
{
int a[] = { 1,-1,2 };
LNode* L=Create(a, 3);
Print(L);
FillSum(L);
printf("*********求完sum后**********\n");
Print(L);
int aa = 0;
return 0;
}
测试结果:
源代码:
// 2015_1_LinkList.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
typedef struct node {
int data, sum;
struct node *next;
}LNode;
//创建链表
LNode* Create( int a[], int len)
{
LNode* L;
//创建头结点
L = (LNode*)malloc(sizeof(LNode));
L->data = a[0];
L->sum = 0;
L->next = L;
LNode *prior, *pcur;
prior = L;
for (int i =1; i < len; i++)
{
pcur = (LNode*)malloc(sizeof(LNode));
pcur->data = a[i];
pcur->sum = 0;
pcur->next = prior->next;
prior->next = pcur;
prior = pcur;
}
return L;
}
//打印链表
void Print(LNode* L)
{
LNode* p;
p = L->next;
while (p != L)
{
printf("data:%d,sum:%d\n", p->data, p->sum);
p = p->next;
}
//退出循环时,p==L
printf("data:%d,sum:%d\n", p->data, p->sum);
}
void FillSum(LNode* L)
{
int temp;
LNode *p, *q;
p = L->next;
while (p != L)
{
q = p;
p = p->next;
temp = 0;
while (q != p)
{
temp =temp+ p->data;
p = p->next;
}
//退出循环时,p=q
p->sum = temp;
p = p->next;
}
//计算L节点的sum值
p = L->next;
temp = 0;
while (p != L)
{
temp = temp + p->data;
p = p->next;
}
L->sum = temp;
}
int main()
{
int a[] = { 1,-1,2 };
LNode* L=Create(a, 3);
Print(L);
FillSum(L);
printf("*********求完sum后**********\n");
Print(L);
int aa = 0;
return 0;
}