帮帮小弟我~还在学习中

帮帮我~~还在学习中
1,给出删除单链表中值为K的结点的前驱结点的算法.

2,试给出实现删除单链表中值的相同的多余接点的算法.

3,试给出依次输入单链表中所有数据元素的算法.

------解决方案--------------------

C/C++ code


#include "stdlib.h"
#include "stdio.h"

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

struct node* build_link(int size) {

    struct node* head = 0;
    struct node* temp = 0;
    struct node* prev = 0;

    while (size--) {

        temp = (struct node*)malloc(sizeof(struct node));
        if (!head)
            head = temp;

        if (prev)
            prev->next = temp;
        prev = temp;
    }

    temp->next = 0;

    return head;
}

/*1,给出删除单链表中值为K的结点的前驱结点的算法.*/

int delete_prev_node(struct node* h, int K) {

    struct node* t = h;
    struct node* p = 0;

    if (h == 0)
        return 0;

    while (t != 0) {

        if (t->data == K) {

            if (p == 0)
                return 0;

            p->data = t->data;
            p->next = t->next;

            free(t);

            t = p->next;
            continue;
        }

        p = t;
        t = t->next;
    }

    return 0;
}

/*2,试给出实现删除单链表中值的相同的多余接点的算法.*/

void delete_same(struct node* h)
{
    struct node* t = h;

    if (h == 0)
        return;

    while (t != 0)
    {
        struct node* a = t->next;
        struct node* p = t;

        while (a != 0)
        {
            if (a->data == t->data)
            {
                p->next = a->next;
                free(a);
                a = p->next;
                continue;
            }
            p = a;
            a = a->next;
        }

        t = t->next;
    }
}

/*3,试给出依次输入单链表中所有数据元素的算法.*/

void input_link(struct node* h)
{
    struct node* t = h;
    int i = 0;

    while (t) 
    {
        printf("input node-%d 's data : ", i++);
        scanf("%d", &(t->data));
        t = t->next;
    }

}

void print_link(struct node* h)
{
    struct node* t = h;

    printf("the link is : ");

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

    printf("\n");
}

int main()
{
    struct node* h = 0;
    int s = 0;
    int t = 0;

    printf("please input the size of the link you want to build : ");
    scanf("%d", &s);

    if ((h = build_link(s)) == 0)
    {
        printf("build link error!!\n");
        return 1;
    }

    input_link(h);
    print_link(h);

    delete_same(h);
    printf("after delete the same node\n");
    print_link(h);

    printf("please input the value K to remove it's prev node : K = ");
    scanf("%d", &t);

    delete_prev_node(h, t);
    print_link(h);


    return 0;
}