站点图标 陌路寒暄

链表基本操作---指定结点删除

链表基本操作---指定结点删除

时间: 1ms        内存:128M

描述:

根据具有10个元素的整型数组构建链表,删除其中的指定结点3和6,并输出链表中所有元素的值。请完善如下程序:只需提交需要填写部分的代码。
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE
{
    int data;           //数据域
    struct NODE *next;  //指针域,指向下一个结点
} Node;
int main()
{
    Node *head, *p1, *p2;     //head头指针,p一般结点指针
    int a[] = {1,2,3,4,5,6,7,8,9,10};
    int i;
    head = (Node *)malloc(sizeof(Node)); //开辟头结点
    p1 = (Node *)malloc(sizeof(Node));
    p1->data = a[0];
    head->next = p1;
    for( i = 1 ; i < 10 ; i++)  //对链表进行赋值,创建包含1-10的链表
    {
        p2 = (Node *)malloc(sizeof(Node));
        p1->next = p2;
        p2->data = a[i];
        p2->next = NULL;
        p1 = p2;
    }
    p1 = head->next;
    p2 = p1->next;
    printf("%d",p1->data);
    while( p2 != NULL )
    {
        if( p2->data == 3 || p2->data == 6)     //对于数据域是3或者是6的结点进行删除
        {
            p1->next = p2->next;
            free(p2);
            /*******在下面填写代码***********/

            /*******在上面填写代码***********/
        }
        printf(" %d",p2->data);
        p1 = p2;
        p2 = p2->next;
    }
    return 0;
}

输入:


输出:

不存在3和6的链表序列

示例输入:

示例输出:

1 2 4 5 7 8 9 10

提示:

参考答案(内存最优[0]):


#include <stdio.h>
#include <stdlib.h>
typedef struct NODE
{
    int data;           //数据域
    struct NODE *next;  //指针域,指向下一个结点
} Node;
int main()
{
    Node *head, *p1, *p2;     //head头指针,p一般结点指针
    int a[] = {1,2,3,4,5,6,7,8,9,10};
    int i;
    head = (Node *)malloc(sizeof(Node)); //开辟头结点
    p1 = (Node *)malloc(sizeof(Node));
    p1->data = a[0];
    head->next = p1;
    for( i = 1 ; i < 10 ; i++)  //对链表进行赋值,创建包含1-10的链表
    {
        p2 = (Node *)malloc(sizeof(Node));
        p1->next = p2;
        p2->data = a[i];
        p2->next = NULL;
        p1 = p2;
    }
    p1 = head->next;
    p2 = p1->next;
    printf("%d",p1->data);
    while( p2 != NULL )
    {
        if( p2->data == 3 || p2->data == 6)     //对于数据域是3或者是6的结点进行删除
        {
            p1->next = p2->next;
            free(p2);
p2 = p1->next;

        }
        printf(" %d",p2->data);
        p1 = p2;
        p2 = p2->next;
    }
    return 0;
}

参考答案(时间最优[0]):


#include <stdio.h>
#include <stdlib.h>
typedef struct NODE
{
    int data;           //数据域
    struct NODE *next;  //指针域,指向下一个结点
} Node;
int main()
{
    Node *head, *p1, *p2;     //head头指针,p一般结点指针
    int a[] = {1,2,3,4,5,6,7,8,9,10};
    int i;
    head = (Node *)malloc(sizeof(Node)); //开辟头结点
    p1 = (Node *)malloc(sizeof(Node));
    p1->data = a[0];
    head->next = p1;
    for( i = 1 ; i < 10 ; i++)  //对链表进行赋值,创建包含1-10的链表
    {
        p2 = (Node *)malloc(sizeof(Node));
        p1->next = p2;
        p2->data = a[i];
        p2->next = NULL;
        p1 = p2;
    }
    p1 = head->next;
    p2 = p1->next;
    printf("%d",p1->data);
    while( p2 != NULL )
    {
        if( p2->data == 3 || p2->data == 6)     //对于数据域是3或者是6的结点进行删除
        {
            p1->next = p2->next;
            free(p2);
p2 = p1->next;

        }
        printf(" %d",p2->data);
        p1 = p2;
        p2 = p2->next;
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

退出移动版