Найти сумму последнего и предпоследнего элементов списка, содержащего не менее двух элементов - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д