吉大考研复试准备-PTA习题11-7 奇数值结点链表(对指针操作的易错点,错了两次了!!!)

文章讲述了在PTA程序设计类实验辅助教学平台上,对`getodd`函数进行修改,解决当输入包含奇数开头链表时的问题,通过添加哨兵节点确保`L`指针正确指向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

PTA | 程序设计类实验辅助教学平台

错误点

struct ListNode *getodd( struct ListNode **L )
{
    typedef struct ListNode node;
    node*oddhead=(node*)malloc(sizeof(node));
    oddhead->next=NULL;
    node*tail=oddhead;

    node*head=(node*)malloc(sizeof(node));
    head->next=*L;

    node*p=head;
    while(p->next!=NULL)
    {
        if(p->next->data%2!=0)
        {
            node*temp=p->next;
            p->next=p->next->next;

            temp->next=tail->next;
            tail->next=temp;
            tail=temp;
        }
        else
            p=p->next;
    }

///////!!!!!如果有奇数开头的链表传入,这样子写就会出错
//////由于第一个是奇数,会移入oddhead链表,而L指针也在第一个位置,就把L也移走了
/////所以就会导致输出了两边oddhead

    return oddhead->next;
};

修改

struct ListNode *getodd( struct ListNode **L )
{
    typedef struct ListNode node;
    node*oddhead=(node*)malloc(sizeof(node));
    oddhead->next=NULL;
    node*tail=oddhead;

    node*head=(node*)malloc(sizeof(node));
    head->next=*L;

    node*p=head;
    while(p->next!=NULL)
    {
        if(p->next->data%2!=0)
        {
            node*temp=p->next;
            p->next=p->next->next;

            temp->next=tail->next;
            tail->next=temp;
            tail=temp;
        }
        else
            p=p->next;
    }
//////!!!!!加一行这个就可以了,因为之前已经给L加上了哨兵结点
//////因此在整个链表操作之后,让L重新指回head即可
    *L=head->next;
    return oddhead->next;
};

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值