c - linkedlist
store ordered number in linkedlist, no repeat.
code:
linkedlist_test.c:
#include <stdio.h> #include <stdlib.h> extern struct linkedlist { int num; struct linkedlist *pnext; }; /** * add a num to ordered linkedlist, if it not exists yet, * * @param num * the number to add * @param start * start of the linkedlist * * @return * the start */ struct linkedlist *add(int num, struct linkedlist *start) { if(start == NULL) { start = (struct linkedlist *) malloc(sizeof(struct linkedlist)); start->num = num; start->pnext = NULL; } else if((start->num) < num) { start->pnext = add(num, start->pnext); } else if((start->num) > num) { struct linkedlist *old_start = start; start = (struct linkedlist *) malloc(sizeof(struct linkedlist)); start->num = num; start->pnext=old_start; } return start; } /** * print the linkedlist * * @param start * start of the linkedlist * @param count used to count elements */ void printll(struct linkedlist *start, int count){ if(start != NULL) { count++; printf("%d, ",start->num); printll(start->pnext, count); } else { printf("\ntotal: %d\n",count); } } int main() { int nums[] = {5,3,9,2,100,4,23,2,6,19,17,11,41,100,9,6,19}, i, n, count; struct linkedlist *start = NULL; n = sizeof(nums) / sizeof(nums[0]); for(i=0;i<n;i++) { start = add(nums[i], start); } count = 0; printll(start, count); return 1; }