1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
// Problem: (*head).value is UGLY!!!
// Solution: head -> value
//
// Problem: struct Node ▒ is too verbose. I want shorter.
// Solution: Don't be lazy!
//
// Problem: But I am lazy... and that's not bad.
// Solution: Fine! Use typedef.
/*
// Original syntax
struct Node {
int value;
struct Node* next;
};
*/
typedef struct Node {
int value;
struct Node* next;
} Node;
// At this point, we have two struct types: 'struct Node' and 'Node'
void print_list(struct Node* head) { // Naming convention: head is an address
// head_node is an object
// printf("[%d]\n", (*head).value);
printf("[%d]\n", head -> value);
}
int main(int argc, char* argv[]) {
// Linked list of size 1.
// ∙ Rule: .next of the tail node must be NULL.
struct Node head_node = { .value = 5, .next = NULL };
print_list(&head_node);
struct Node next_node = { .value = 6, .next = NULL };
// At this point, we have two linked lists of size 1 (each). Let's connect them!
head_node.next = &next_node;
// Now, we have a linked list of size 2.
print_list(&head_node);
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2021 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.