以升序将元素插入单链表中。

时间:2014-05-10 14:48:17

标签: c linked-list

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    int data;
    struct node *link;
}list;

list *header =NULL;

void insert(int num)
{
    printf("num:%d ", num);
    struct node *temp, *r;
    temp = header;

    r = malloc(sizeof(struct node));
    r -> data = num;

    if(temp == NULL ||temp-> data > num )
    {
        r-> link = temp ;
        header = r;
    }
    else 
    {
        while(temp !=NULL)
        {
            if(temp -> data <= num && (temp->link->data > num));
            {
                r -> link = temp -> link;
                temp->link=r;
                return;
            }
            temp = temp -> link;
        }           
    }
}

void display()
{
    struct node *temp;
    temp = header;

    while(temp != NULL)
    {
        printf("%d ", temp->data);
        temp = temp->link;
    }
}

void main( )
{
    insert(10);
    insert(5);
    insert(17);
    insert(8);
    insert(23);
    insert(78);

    display();
}

这里我试图按升序插入元素。令我惊讶的是,我得到的输出是5 78 23 8 17 10,这是不正确的,有谁可以请看看这个?任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:1)

为了在链表中按升序插入节点,您必须解决以下情况 -
 1.列表为空:当列表中没有元素时  2.在开头插入:当r->data < header->data时,需要在列表的最开头插入  3.在结尾处插入:当r->data大于列表中具有最大值的节点时,需要在最后插入(假设我们在此处执行已排序的插入),作为用户{{ 1}}已经指出了  4.插入中间:当@keltar但小于列表中的最大元素时,需要将其插入标题和最后一个节点之间的某处。

排序插入的简单实现如下 -

r->data > header->data