zoukankan      html  css  js  c++  java
  • 链表的有序插入

    从小到大排序

    根据指针获取当前id,并设置前指针,方便操作:

    // test1107.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "stdio.h"
    #include "memory.h"
    #include <string.h>
    #include <stdlib.h>
    #include "string.h"
    
    typedef struct LINK{
        int id;
        LINK *next;
    }Link;
    
    typedef struct LL{
        Link *root;
        int num;
    }Ll;
    
    void insert(Ll *l,int num);
    
    int main(){
        Ll *ll = (Ll *)malloc(sizeof(Ll));
        ll->num = 0;
        ll->root = NULL;
        insert(ll,5);
        insert(ll,2);
        insert(ll,20);
        insert(ll,1);
        insert(ll,100);
        Link *link = (Link *)malloc(sizeof(Link));
        printf("%d",ll->root->id);
        link = ll->root->next;
        while(link != NULL){
            printf("->%d",link->id);
            link = link->next;
        }
        getchar();
        return 0;
    }
    
    void insert(Ll *l,int num){
        Link * linkp = (Link *)malloc(sizeof(Link));
        Link * current =  (Link *)malloc(sizeof(Link));
        Link * new_id = (Link *)malloc(sizeof(Link));
        current = l->root;
        linkp = l->root;
        while(current != NULL && current->id<num){
            linkp = current;
            current = current->next;
        }
        new_id->id = num;
        new_id->next = current;
        if(linkp == NULL){
            l->root = new_id;
        }else if(num < l->root->id){
            l->root = new_id;
        }else{
            linkp->next = new_id;
        }
    }

    从大到小排序

    // test1107.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "stdio.h"
    #include "memory.h"
    #include <string.h>
    #include <stdlib.h>
    #include "string.h"
    
    typedef struct LINK{
        int id;
        LINK *next;
    }Link;
    
    typedef struct LL{
        Link *root;
        int num;
    }Ll;
    
    void insert(Ll *l,int num);
    
    int main(){
        Ll *ll = (Ll *)malloc(sizeof(Ll));
        ll->num = 0;
        ll->root = NULL;
        insert(ll,5);
        insert(ll,2);
        insert(ll,20);
        insert(ll,1);
        insert(ll,5);
        insert(ll,100);
        Link *link = (Link *)malloc(sizeof(Link));
        printf("%d",ll->root->id);
        link = ll->root->next;
        while(link != NULL){
            printf("->%d",link->id);
            link = link->next;
        }
        getchar();
        return 0;
    }
    
    void insert(Ll *l,int num){
        Link * linkp = (Link *)malloc(sizeof(Link));
        Link * current =  (Link *)malloc(sizeof(Link));
        Link * new_id = (Link *)malloc(sizeof(Link));
        current = l->root;
        linkp = l->root;
        while(current != NULL && current->id>num){
            linkp = current;
            current = current->next;
        }
        new_id->id = num;
        new_id->next = current;
        if(linkp == NULL){
            l->root = new_id;
        }else if(num > l->root->id){
            l->root = new_id;
        }else{
            linkp->next = new_id;
        }
    }

  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/xing901022/p/3430162.html
Copyright © 2011-2022 走看看