Найти сумму последнего и предпоследнего элементов списка, содержащего не менее двух элементов - C (СИ)
Формулировка задачи:
Задача
Описать функцию или процедуру, которая находит сумму последнего и предпоследнего элементов списка, содержащего не менее двух элементов (тип=целочисленный).#include <stdio.h> #include <stdlib.h> #include <conio.h> struct TNode { int n; TNode *next; } *start , *last ; void funkt1 (int m ) { TNode *p; while (m!=0) { if (start==NULL) { start= new TNode; start->n=random(100); start->next=NULL; last=start; printf(" %d ",start->n); } else { p= new TNode; p->n=random(100); p->next=NULL; last->next=p; last=p; printf(" %d ",p->n); } m--; } return ; } void funkt2 () { int S=0; TNode *f; f=start; while ((f->next)->next!=NULL) f=f->next; S= f->n + (f->next)->n ; printf("\n S=%d ",S); return ; } int main() { randomize (); clrscr (); int L; printf("vvedute kol-vo elementov : "); scanf("%d",&L); funkt1 (L); funkt2 (); getch(); return 0 ; }
Решение задачи: «Найти сумму последнего и предпоследнего элементов списка, содержащего не менее двух элементов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <assert.h> typedef struct Node { int val; struct Node * next; } Node; typedef struct List { Node *head; } List; List * list_alloc() { List *l = malloc(sizeof(List)); if (l != NULL) l->head = NULL; return l; } bool list_is_empty(List *l) { return l->head == NULL; } void list_push_back(List *l, int v) { Node *n = malloc(sizeof(Node)); assert(n != NULL); n->val = v; n->next = NULL; if (l->head == NULL) { l->head = n; } else { Node *current = l->head; while (current->next != NULL) current = current->next; current->next = n; } } int list_pop_back(List *l) { int v; Node *prev = NULL; Node *current = l->head; while (current->next != NULL) { prev = current; current = current->next; } if (prev == NULL) { v = current->val; free(current); current = NULL; } else { v = current->val; free(current); prev->next = NULL; } return v; } void list_print(List *l) { Node *current = l->head; while (current != NULL) { printf("%d ", current->val); current = current->next; } printf("\n"); } void list_free(List *l) { while (list_is_empty(l)) { list_pop_back(l); } free(l); } int main(void) { int val; List *list = list_alloc(); list_push_back(list, 1); list_push_back(list, 2); list_push_back(list, 3); list_push_back(list, 4); list_push_back(list, 5); list_print(list); printf("%d\n", list_pop_back(list) + list_pop_back(list)); list_free(list); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д