美文网首页C语言学习C语言
C语言-单链表的实现和操作

C语言-单链表的实现和操作

作者: 咸鱼Boss | 来源:发表于2019-10-22 23:14 被阅读0次
    #include<stdlib.h>
    #include<stdio.h>
    

    定义

    typedef struct ListNode{
        int val;
        struct ListNode* next;
    }ListNode;
    

    遍历

    void print_ListNode(ListNode* head){
        for(ListNode* p = head; p!=NULL; p=p->next){
            printf("%d->",p->val);
        }
        printf("\n");
    }
    

    创建

    ListNode* create(int val){
        ListNode* node = malloc(sizeof(ListNode));
        node->val = val;
    }
    

    搜索

    int find(ListNode* head, int val){
        int count = 0;
        while(head){
            if(head->val == val){
               return count;
            }
           head = head->next;
           count++;
       }
       return -1;
    }
    

    长度

    int ListLen(ListNode* head){
        int count = 0;
        while(head){
           head = head->next;
           count++;
       }
       return count;
    }
    

    增(append)

    void ListAppend(ListNode* head, int val){
        while(head->next!=NULL){
            head = head->next;
        }
        ListNode *node = create(6);
        head->next = node;
    }
    

    增(insert)

    void ListInsert(ListNode*head, int val, int index){
        if(index == 0){
            ListNode* node = create(head->val);
            head->val = val;
            node->next = head->next;
            head->next = node;
        }else{
            for(int i = 0; i<index-1; i++){
                head = head->next;
            }
            ListNode* node = create(val);
            node->next = head->next;
            head->next = node;
        }
    }
    

    删(index>0)

    void* ListDelete(ListNode*head, int index){
        for(int i = 0; i< index-1; i++){
            head=head->next;
        }
        ListNode * temp = head->next;
        head->next = head->next->next;
        free(temp);
    }
    

    反转

    ListNode* ListReverse(ListNode*head){
        if(head == NULL || head->next == NULL){
            return head;
        }
        ListNode* newHead = ListReverse(head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
    

    复制

    ListNode* ListCopy(ListNode* head){
        if(head == NULL){
            return NULL;
        }
        ListNode* node = create(head->val);
        node-> next = ListCopy(head->next);
        return node;
    }
    

    相关文章

      网友评论

        本文标题:C语言-单链表的实现和操作

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