monoteen

Linked List_error

Nov 5th, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct ListNode {
  6.     char data[10];
  7.     struct ListNode* link;
  8. } listNode;
  9.  
  10. typedef struct {
  11.     listNode* head;
  12. } linkedList_h;
  13.  
  14. linkedList_h* createLinkedList_h(void);
  15. void freeLinkedList_h(linkedList_h*);
  16. void addLastNode(linkedList_h*, char*);
  17. void reverse(linkedList_h*);
  18. void deleteLastNode(linkedList_h*);
  19. void printList(linkedList_h*);
  20.  
  21.  
  22. linkedList_h* createLinkedList_h(void) {
  23.     linkedList_h* L;
  24.     L = (linkedList_h*)malloc(sizeof(linkedList_h));
  25.     L -> head = NULL;
  26.     return L;
  27. }
  28.  
  29. void addLastNode(linkedList_h* L, char* x) {
  30.     listNode* newNode;
  31.     listNode* p;
  32.     newNode = (listNode*)malloc(sizeof(listNode));
  33.     strcpy(newNode -> data, x);
  34.     newNode -> link = NULL;
  35.     if (L -> head == NULL) {
  36.         L -> head = newNode;
  37.         return;
  38.     }
  39.     p = L -> head;
  40.     while (p -> link != NULL) p = p -> link;
  41.     p -> link = newNode;
  42. }
  43.  
  44. void reverse(linkedList_h* L) {
  45.     listNode* p;
  46.     listNode* q;
  47.     listNode* r;
  48.    
  49.     p = L -> head;
  50.     q = NULL;
  51.     r = NULL;
  52.    
  53.     while (p! = NULL) {
  54.         r = q;
  55.         q = p;
  56.         p = p -> link;
  57.         q -> link = r;
  58.     }
  59.     L -> head = q;
  60.    
  61. }
  62.  
  63. void deleteLastNode(linkedList_h* L) {
  64.     listNode* previous;
  65.     listNode* current;
  66.     if (L -> head == NULL) return;
  67.     if (L -> head -> link == NULL) {
  68.         free (L -> head);
  69.         L -> head = NULL;
  70.         return;
  71.     }
  72.     else {
  73.         previous = L -> head;
  74.         current = L -> head -> link;
  75.         while (current -> link != NULL) {
  76.             previous = current;
  77.             current = current -> link;
  78.         }
  79.         free(current);
  80.         previous -> link = NULL;
  81.     }
  82. }
  83.  
  84. void freeLinkedList_h(linkedList_h* L) {
  85.     listNode* p;
  86.     while (L -> head != NULL) {
  87.         p = L -> head;
  88.         L -> head = L -> head -> link;
  89.         free(p);
  90.         p = NULL;
  91.     }
  92. }
  93.  
  94. void printList(linkedList_h* L) {
  95.     listNode* p;
  96.     printf("L = (");
  97.     p = L -> head;
  98.     while (p != NULL) {
  99.         printf("%s", p -> data);
  100.         p = p -> link;
  101.         if (p != NULL) printf(", ");
  102.     }
  103.     printf(") \n");
  104. }
  105.  
  106.  
  107. int main(void) {
  108.     linkedList_h* L;
  109.     L = createLinkedList_h();
  110.     printf("(1) 공백 리스트 생성하기 \n");
  111.     printList(L); getchar();
  112.    
  113.     printf("(2) 리스트에 3개의 노드 추가하기 \n");
  114.     addLastNode(L, "월");
  115.     addLastNode(L, "수");
  116.     addLastNode(L, "금");
  117.     printList(L); getchar();
  118.    
  119.     printf("(3) 리스트에 마지막 노드 한개 추가하기 \n");
  120.     addLastNode(L, "일");
  121.     printList(L); getchar();
  122.    
  123.     printf("(4) 마지막 노드 삭제하기 \n");
  124.     deleteLastNode(L);
  125.     printList(L); getchar();
  126.    
  127.     printf("(5) 리스트 원소를 역순으로 변환하기 \n");
  128.     reverse(L);
  129.     printList(L); getchar();
  130.    
  131.     printf("(6) 리스트 공간을 해제하여, 공백 리스트 상태로 만들기 \n");
  132.     freeLinkedList_h(L);
  133.     printList(L);
  134.    
  135.     getchar();
  136.     return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment