注册 登录
编程论坛 数据结构与算法

设计一个在不带头结点的链表的第i个元素之前插入一个元素的算法。 求高手指点

rubio09 发布于 2012-03-19 11:16, 2242 次点击
求高手指点
5 回复
#2
梁__2012-03-19 22:31
我也在为这个问题而烦恼。。。
#3
C_戴忠意2012-03-20 15:27
好好看看数据结构
#4
爱德华2012-03-20 18:31
自己多看看书吧  比较基础的东西  这个不会就别学c了
#5
hifine2012-03-24 00:53
看数据结构的书吧。。
#6
shuijiashui2012-03-26 00:55
#include "stdio.h"
#include "stdlib.h"

typedef struct node
{
    int data;
    struct node *next;
    struct node *pre;
}Node;

Node *head=NULL;

Node* create()
{
    Node *p,*tail;
    p=(Node*)malloc(sizeof(Node));//申请一个节点
    scanf("%d",&p->data);
    head=p;
    head->pre=NULL;
    if(p->data==0)//若节点为0;则创建失败
    {
        free(p);
        head=NULL;
        head->pre=NULL;
        tail=NULL;
        return head;
    }
   
    while(p->data!=0)//头结点创建成功后,接着申请节点
    {
        tail=p;
        p=(Node*)malloc(sizeof(Node));
        scanf("%d",&p->data);
        if(p->data!=0)
        {
            p->pre=tail;
            tail->next=p;
        }
    }
    free(p);//节点为0,则尾节点的next指针为null
    tail->next=NULL;
    return head;
}

void insert(Node *head,int i)//插入
{
    for (Node *find=head;find;find=find->next)
    {
        if(i--==1)
        {
            Node *p=(Node*)malloc(sizeof(Node));
            scanf("%d",&p->data);
            if(find->pre)
            {
                find->pre->next=p;
                p->pre=find->pre;
                p->next=find;
                find->pre=p;
            }
            else
            {
                find->pre=p;
                p->next=find;
                ::head=p;
            
            }
            
            return;
        }
    }
   
    printf("超出下标\n");
}



int main()
{
    Node *p=create();
    Node *q=p;
    while(p)
    {
        printf("%d\n",p->data);
        p=p->next;
    }
    printf("------------------------------------------\n");
    p=q;
    insert(p,1);
    printf("------------------------------------------\n");
    while(head)
    {
        printf("%d\n",head->data);
        head=head->next;
    }
    return 0;
}
1