Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /*TODO:
- * account for indexes greater than list size
- */
- typedef struct linkedlist {
- int data;
- struct linkedlist *next;
- } LinkedList_t;
- LinkedList_t *createLinkedList(int d)
- {
- LinkedList_t *p = malloc(sizeof(LinkedList_t));
- p->data = d;
- p->next = NULL;
- return p;
- }
- int push(LinkedList_t *h, int d)
- {
- // Add to the top of the list
- if(h == NULL)
- return -1;
- LinkedList_t *k = h;
- while(k->next != NULL) {
- k = k->next;
- }
- k->next = createLinkedList(d);
- return 0;
- }
- int pop(LinkedList_t *h)
- {
- // Delete last entry
- if(h == NULL)
- return -1;
- if(h->next == NULL)
- free(h);
- // get to second to last entry, then free
- LinkedList_t *k = h;
- while(k->next->next != NULL) {
- k = k->next;
- }
- free(k->next);
- k->next = NULL;
- return 0;
- }
- int search(LinkedList_t *h, int st)
- {
- LinkedList_t *k = h;
- int i = 0;
- while(k->data != st) {
- k = k->next;
- i++;
- }
- return i;
- }
- int deleteByIndex(LinkedList_t *h, int index)
- {
- LinkedList_t *k = h;
- if(index == 0) {
- k = k->next;
- *h = *k;
- return 0;
- }
- for(int i = 0; i < index - 1; i++) {
- k = k->next;
- }
- free(k->next);
- k->next = k->next->next;
- return 0;
- }
- void setDataByIndex(LinkedList_t *h, int index, int s)
- {
- LinkedList_t *k = h;
- for(int i = 0; i < index; i++) {
- k = k->next;
- }
- k->data = s;
- }
- int getDataByIndex(LinkedList_t *h, int index)
- {
- LinkedList_t *k = h;
- for(int i = 0; i < index; i++) {
- k = k->next;
- }
- return k->data;
- }
- void printList(LinkedList_t *h)
- {
- LinkedList_t *t = h;
- while(t != NULL) {
- printf("%d\n", t->data);
- t = t->next;
- }
- }
- int main()
- {
- LinkedList_t *head = createLinkedList(1);
- push(head, 2);
- push(head, 3);
- push(head, 4);
- printList(head);
- puts("");
- setDataByIndex(head, 1, 10);
- printList(head);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement