链表的实现

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


struct Node
{
    int data;
    struct Node *next;
};

typedef struct Node* LinkList;
typedef struct Node *ListNode;
void InitList(LinkList *head);
void HeadInsrt(LinkList *head);
void showList(LinkList head);
void EndInsert(LinkList *head);
void Delete(LinkList *head,int index);
void InsertByPosition(LinkList *head,int index,int data);
int main(void)
{

    LinkList head;

    InitList(&head);
    //HeadInsrt(&head);
    EndInsert(&head);
    showList(head);
    Delete(&head,1);
    printf("\n");
    showList(head);
    Delete(&head,4);
    printf("\n");
    showList(head);




    system("pause");
    return 0;
}

void InitList(LinkList *head)
{
    *head=(LinkList)malloc(sizeof(ListNode));
    (*head)->next=NULL;
}

void HeadInsrt(LinkList *head)
{

    int a;
    printf("请输入要生成的节点个数:");
    scanf("%d",&a);
    struct Node *p;
    for(int i=0;i<a;i++)
    {
        int data;scanf("%d",&data);
        p = (struct Node *)malloc(sizeof(struct Node));
        p->data=data;
        p->next=(*head)->next;
        (*head)->next=p;
        
    }

}

void EndInsert(LinkList *head)
{
    LinkList tail;
    tail=*head;
    int a;
    struct Node *p;
    printf("enter entire whole number:");
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        int data;scanf("%d",&data);
        p = (struct Node *)malloc(sizeof(struct Node));
        p->next=NULL;
        p->data = data;
        tail->next=p;
        tail=p;
    }

}

void showList(LinkList head)
{
    LinkList p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    } 
}

void InsertByPosition(LinkList *head,int index,int data)
{
    int i=0;
    LinkList p=*head;
    while(p && i<index-1)
    {
        p=p->next;
        i++;
    }

    if(!p || index<i)
    {
        printf("插入位置不合法\n");
    }
    ListNode q;
    q=(ListNode)malloc(sizeof(struct Node));
    q->data = data;
    q->next=p->next;
    p->next=q;
}

void Delete(LinkList *head,int index)
{
    LinkList p=*head;
    int i=0;
    while(p && i<index-1)
    {
        p=p->next;
        i++;
    }
    if(!p || i>index)
    {
        printf("删除位置不合理");

    }
    if(p->next==NULL)//第i-1个节点之后已无其他节点
    {
        printf("第%d个节点不存在\n",index);
    }

    LinkList q=p->next;
    p->next=q->next;
    free(q);

}

 

posted @ 2020-10-29 20:55  传说中的旅行者  阅读(92)  评论(0)    收藏  举报