シングルチェーン表の実現を復習します.


大学三年生になりました.非コンピュータ専門の学生として、仕事を探すのは本当にストレスがあります.数日間で夏休み実習生の面接があります.これは最後のチャンスだと知っていますので、ぜひ復習してください.以下はシングルチェーン表の実現です.
/*****************************     *********************************/
/******************************2013/5/29*********************************/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
    int data;
    struct Node*next;
}SLnode, *SLNode;

/*****************************           **********************/
SLNode CreateSList()
{
    int len;
    int val;
    SLNode head = (SLNode)malloc(sizeof(SLnode));//       ,        
    if(head == NULL)
    {
        printf("      
"); exit(-1); } head->data = NULL; SLNode tail = head; printf(" :len="); scanf("%d",&len); for(int i = 0; i<len; i++) { printf(" %d :",i+1); scanf("%d",&val); SLNode pNew = (SLNode)malloc(sizeof(SLnode)); if(pNew==NULL) { printf("
"); exit(-1); } pNew->data = val; tail->next = pNew; pNew->next = NULL; tail = pNew; } return head; } /***************************** **************************/ int ListLength(SLNode head) { SLNode p = head; int size = 0; while(p->next != NULL) { p = p->next; size++; } return size; } /***************************** i(0<= i <= size) ******************************/ int ListInsert(SLNode head, int pos, int x) { SLNode p, q; int j = -1; p = head; while(p->next != NULL && j < pos-1)// pos-1 { p = p->next; j++; } if(j != pos-1) { printf("
"); return 0; } q = (SLNode)malloc(sizeof(SLnode)); if(q == NULL) { printf("
"); exit(-1); } q->data = x; q->next = p->next; p->next = q; return 1; } /***************************** i(0<= i <= size-1) ******************************/ int ListDelete(SLNode head, int pos, int *x) { SLNode p, q; int j = -1; p = head; while(p->next != NULL && j < pos-1) { p = p->next; j++; } if(j != pos-1) { printf("
"); return 0; } q = p->next; p->next = q->next; *x = q->data; free(q); return 1; } /***************************** ******************************/ void displayList(SLNode head) { SLNode p = head; while(p->next != NULL) { printf("%d ",p->next->data); p = p->next; } return ; } /***************************** ******************************/ void Destroy(SLNode *head) { SLNode p, q; p = *head; while(p != NULL) { q = p; p = p->next; free(q); } *head = NULL; return ; } /***************************** ******************************/ int main() { SLNode head; int x; head = CreateSList(); displayList(head); printf("
:%d",ListLength(head)); if(ListInsert(head,4,30)) printf("
, :%d
",30); else printf("
"); displayList(head); if(ListDelete(head,3,&x)) printf("
, :%d
",x); else printf("
"); displayList(head); Destroy(&head); return 0; }