pintia上浙大的链表题目,求助!
题目要求:实现两个函数struct ListNode *readlist()与struct ListNode *getodd( struct ListNode **L )分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。
输入样例:1 2 2 3 4 5 6 7 -1
输出样例:1 3 5 7
2 2 4 6
以下为我的代码
评测结果如下

小白一枚,求大佬不吝指出问题!
输入样例:1 2 2 3 4 5 6 7 -1
输出样例:1 3 5 7
2 2 4 6
以下为我的代码
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
struct ListNode *L, *Odd;
L = readlist();
Odd = getodd(&L);
printlist(Odd);
printlist(L);
return 0;
}
struct ListNode *readlist()
{
int num;
struct ListNode *p,*head,*tail;
head=tail=NULL;
while(scanf("%d",&num)){
if(num==-1)break;
p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->data=num;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;
}
struct ListNode *getodd( struct ListNode **L )//L是头指针的地址 *L即为头指针
{
struct ListNode *p=NULL,*head=NULL,*tail=NULL,*p2=NULL,*p1=NULL;//此时的head是奇数链的头指针
p1=*L;
while(p1){
if(p1->data%2){
if(head==NULL)
head=p1;
else
tail->next=p1;
tail=p1;
//建立新的奇数链
if(p1==*L)
*L=p1->next;
else
p2->next=p1->next;
}
else{
p2=p1;
p1=p1->next;
}
}
return head;
}评测结果如下

小白一枚,求大佬不吝指出问题!
...全文
相关推荐
pintia_LinearList.zip
这也提示我们,对于频繁需要动态调整大小的数据集,链表等其他数据结构可能会更合适。3.
2022天梯赛热身赛1~7题满分代码(JAVA)
**数据结构**:可能涉及到数组、链表、栈、队列、树、图等各种数据结构的实现和应用。3.
PTA—C语言数据结构:顺序表.ppt
顺序表与链表的比较: - 顺序表访问速度快,但插入和删除操作可能导致元素移动,效率相对较低。 - 链表插入和删除不需要移动元素,但访问速度较慢,因为需要遍历链表。6.
13994数据结构习题及参考答案
题目1强调了数据结构的定义,即A.数据元素的组织形式,它不仅仅是数据类型(B)或数据的定义(D),而是数据元素
diffusion-models.7z.018
diffusion-models.7z.018


