美文网首页
2019-04-25 链表基础

2019-04-25 链表基础

作者: 请叫我魔法师 | 来源:发表于2019-04-25 14:46 被阅读0次

一、结构体

typedef struct student {
    int number;
    struct student *next;
}Student;

包含一个数据,一个指针。指针指向下一个节点。
使用typedef初始化结构体,就是用起来方便,定义的时候不用struct studen a这种写法,直接用Stueden a这种写法就行。图个方便。

二、初始化

Student * linkInit(int n) {
    
    Student *head, *node, *end;
    
    head = (Student *)malloc(sizeof(Student));
    end = head;
    for (int i = 0; i < n; i++) {
        node = (Student *)malloc(sizeof(Student));
        node->number = (i+1) * 100;
        end->next = node;
        end = node;
    }
    end->next = NULL;
    
    return head;
}

void logLink(Student *link) {
    
    printf("                     \n");
    
    Student *node = link->next;
    
    while (node != NULL) {
        printf("node.number = %d\n", node->number);
        node = node->next;
    }
}

void deleteNode(Student *link, int n) {
    
    int index = 0;
    Student *node = link;
    Student *preNode = link;
    
    while (node != NULL && index < n) {
        preNode = node;
        node = node->next;
        index ++;
    }
    
    if (node != NULL) {
        preNode->next = node->next;
        free(node);
    }else{
        printf("node不存在\n");
    }
}

void updateNode(Student *link, int n, int nuwNum) {
    
    int index = 0;
    Student *node = link;
    
    while (node != NULL && index < n) {
        node = node->next;
        index ++;
    }
    
    if (node != NULL) {
        node->number = nuwNum;
    }else {
        printf("node不存在\n");
    }
}

void insertNode(Student *link, int n, int newNum) {
    int index = 0;
    Student *node = link;
    Student *preNode = link;
    
    while (node != NULL && index < n) {
        preNode = node;
        node = node->next;
        index ++;
    }
    
    if (node != NULL) {
        Student *newNode = (Student *)malloc(sizeof(Student));
        newNode->number = newNum;
        preNode->next = newNode;
        newNode->next = node;
    }else {
        printf("node不存在\n");
    }
}

void reverseList(Student *link) {
    
    Student *preNode = link->next;
    Student *curNode = preNode->next;
    
    while (curNode != NULL) {
        preNode->next = curNode->next;
        curNode->next = link->next;
        link->next = curNode;
        curNode = preNode->next;
    }
}

void reverseList2 (Student *link) {
    
    Student *newLink = linkInit(0);
    Student *curNode = link->next;
    Student *nextNode = curNode->next;
    
    while (curNode != NULL) {
        nextNode = curNode->next;
        curNode->next = newLink->next;
        newLink->next = curNode;
        curNode = nextNode;
    }
    *link = *newLink;
}


三、运行

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
    Student *link = linkInit(8);
    logLink(link);
    
//    deleteNode(link, 1);
//    logLink(link);
//
//    updateNode(link, 4, 444);
//    logLink(link);
//
//    insertNode(link, 1, 1111);
//    logLink(link);
    
//    reverseList2(link);
//    logLink(link);
    
    return 0;
}

相关文章

  • 2019-04-25 链表基础

    一、结构体 包含一个数据,一个指针。指针指向下一个节点。使用typedef初始化结构体,就是用起来方便,定义的时候...

  • 链表基础

    链表基础 链表长度 链表为空 链表结构 链表增加

  • IOS开发_链表

    1、基础概念; 2、链表的定义; 3、链表的分类; 4、链表的特点; 1、基础概念; 1.1结点:链表中每...

  • day22

    2019-04-25

  • ❄️画檐蛛网惹飞絮

    2019-04-25

  • 数据结构(静态链表的基础操作)

    静态链表的基础操作的前提是已经成功创建静态链表的基础上 静态链表中添加元素 加入将元素4添加到上静态链表中第3个位...

  • 数据结构与算法——线性表3

    线性表——单向循环链表 3、单向循环链表 在单向链表的基础上,单向链表的尾结点的Next指向链表的头部,就是为循环...

  • 反转链表

    讲反转链表之前,想讲一下怎么打印链表链表结构: 例子:打印链表: 反转链表的基础上,相当于要先遍历一边链表,上面的...

  • 02单项循环链表

    [toc] 循环链表 循环链表 就是在单链表的基础上修改而来 单链表是将尾结点的指针指向NULL,循环链表是将尾结...

  • 链表(下):如何轻松写出正确的链表代码?

    链表(下):如何轻松写出正确的链表代码? 上一节我讲了链表相关的基础知识。学完之后,我看到有人留言说,基础知识我都...

网友评论

      本文标题:2019-04-25 链表基础

      本文链接:https://www.haomeiwen.com/subject/ujczgqtx.html