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

Home Web Board ProblemSet Standing Status Statistics
OJ系统新功能测试中,如有问题请联系 17865569030 17865569180 17865571035 尽量不要在上课时间打电话

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

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 164   Solved: 108
[ Submit][ Status][ Web Board]

Description

根据具有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;
}

Input

Output

不存在3和6的链表序列

Sample Output

1 2 4 5 7 8 9 10

HINT

[ Submit][ Status][ Web Board]
#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;
}


猜你喜欢

转载自blog.csdn.net/qq_41661809/article/details/80821776
今日推荐