无表头单链表一些基本操作

这里主要写了链表的插入(头插,尾插,中间插),删除,遍历操作。

#include <stdio.h>

struct node
{
    int num;

    struct node *next;
};

typedef struct node Node;
typedef struct node  * Link;

void creat_link(Link *head)
{
    *head = NULL;
}

void insert_head_node(Link *newnode, Link *head)
{
    (*newnode)->next = *head;
    *head = *newnode;
}

void insert_tail_node(Link *newnode, Link *head)
{
    if(*head == NULL)
    {
        (*newnode)->next = NULL;
    *head = *newnode;
    }
    else
    {

        Link temp = *head;

        while(temp->next != NULL)
        {
            temp = temp->next;
        }
        temp->next = *newnode;
        (*newnode)->next = NULL;
    }
}

int insert_mid_node(Link *newnode, Link *head, int num)
{
    if(*head == NULL)
    {
        return -1;
    }

    Link temp = *head;

    while(temp != NULL)
    {
        if(temp->num == num)
        {
            (*newnode)->next = temp->next;
            temp->next = *newnode;
            break;
        }
        temp = temp->next;
    }

    return 0;
}

int delete_node(int num, Link *head)
{
    if(*head == NULL)
    {
        return -1;
    }

    Link temp = *head;

    if(temp->num == num)
    {
        *head = (*head)->next;
    free(temp);
    temp = NULL;
    return 0;
    }
    else
    {
        Link ptr = temp;
    temp = temp->next;

    while(temp != NULL)
    {
        if(temp->num == num)
        {
                ptr->next = temp->next;
        free(temp);
        temp = NULL;
        return 0;
        }

        ptr = temp;
        temp = temp->next;
    }
    }
}


int display_node(Link *head)
{
    if(*head == NULL)
    {
        return -1;
    }

    Link temp = *head;

    while(temp != NULL)
    {
        printf("%d\n",temp->num);
    temp = temp->next;
    }
}

int main()
{
    int i;
    Link head;
    Link newnode;

    creat_link(&head);

    for(i = 0; i < 10; i++)
    {   
    newnode = (Link)malloc(sizeof(Node));
    newnode->num = i + 1;
    //insert_head_node(&newnode,&head);
    insert_tail_node(&newnode,&head);
    }

    display_node(&head);

    newnode = (Link)malloc(sizeof(Node));

    newnode->num = 11;

    insert_mid_node(&newnode,&head,5);

    display_node(&head);

    printf("delete 5:\n");
    delete_node(5,&head);
    display_node(&head);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/pencher_liu/article/details/53750187