14 求链表的表长

/*求表长*/
#include<stdio.h>
#include<stdlib.h>

//链表中节点的结构
typedef struct Link {
    int  data;
    struct Link* next;
}link;

//链表初始化
link* initLink(link* phead) {
    link* first_node = (link*)malloc(sizeof(link));//创建第一个节点
    //第一个结点先初始化
    printf("请输入第一个结点的值:\n");
    int firstNum = 0;
    scanf("%d", &firstNum);
    first_node->data = firstNum;
    first_node->next = NULL;
    phead = first_node;//头指针指向第一个节点

    //尾插入初始化赋值
    printf("输入若干个值保存到链表中:\n");
    int num = 0;
    while (num != -1) { //-1代表结束
        scanf("%d", &num);
        link* new_node = (link*)malloc(sizeof(link)); //申请新的结点
        new_node->data = num;
        new_node->next = NULL;
        first_node->next = new_node;  //第一个结点的指针域指向这个新申请的结点
        first_node = new_node;  //第一个结点后移
    }
    printf("头指针指向的值是:%d\n", phead->data);//1
    return phead;  //将指向第一个结点的头指针返回
}


void showLink(link* phead) {
    link* tmp = phead;
    while (tmp != NULL) {
        if (tmp->data == -1) {
            break;
        }
        printf("%d ", tmp->data);
        tmp = tmp->next;
    }
    printf("\n");
}


//求链表的表长
int getLinkLength(link* phead) {
    link* tmp = phead;
    int len = 0;
    while (tmp != NULL) {
        if (tmp->data == -1) {
            break;
        }
        len++;
        tmp = tmp->next;
    }
    return len;
}


void main() {
    link* myhead = NULL; //创建头指针
    myhead = initLink(myhead); //获得经过初始化后的头指针
    printf("初始化链表为:\n");
    showLink(myhead);
    printf("表的长度是:%d\n", getLinkLength(myhead));
}

 

posted @ 2020-03-10 23:53  shanlu  阅读(419)  评论(0编辑  收藏  举报