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

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

typedef struct node NODE;

/* 创建单链表 */
NODE *creatqlist()
{
    NODE *head, *p, *s;
    int num;

    head = (NODE *)malloc(sizeof(NODE));
    p = head;

    /* 输入数据：1 2 3 4 5 6 0 */
    num = 1;

    while (num != 0)
    {
        s = (NODE *)malloc(sizeof(NODE));

        s->data = num;
        p->next = s;
        p = s;

        if (num == 1)
            num = 2;
        else if (num == 2)
            num = 3;
        else if (num == 3)
            num = 4;
        else if (num == 4)
            num = 5;
        else if (num == 5)
            num = 6;
        else if (num == 6)
            num = 0;
    }

    p->next = NULL;

    return head;
}

/* 删除第i个结点 */
void deleteNode(NODE *head, int i)
{
    NODE *p, *s;
    int j = 0;

    p = head;

    /* 找到第i个结点的前一个结点 */
    while (p->next != NULL && j < i - 1)
    {
        p = p->next;
        j++;
    }

    if (p->next == NULL || j != i - 1)
    {
        printf("the delete position is illegal\n");
    }
    else
    {
        s = p->next;
        p->next = s->next;
        free(s);
    }
}

int main()
{
    NODE *q, *HEAD;

    /* 建立链表 */
    HEAD = creatqlist();

    /* 输出删除前的数据 */
    q = HEAD->next;

    printf("the input number are:\n");

    while (q != NULL)
    {
        printf("%d\t", q->data);
        q = q->next;
    }

    printf("\n");

    /* 删除第3个元素 */
    deleteNode(HEAD, 3);

    /* 输出删除后的数据 */
    q = HEAD->next;

    printf("the input number after delete are:\n");

    while (q != NULL)
    {
        printf("%d\t", q->data);
        q = q->next;
    }

    printf("\n");

    return 0;
}