习题11-7 奇数值结点链表 (20分)

图片说明

部分正确 ,提示: 段错误,求大神解答
struct ListNode *readlist()
{
struct ListNode *head,*tail,*p;
int t=0;
scanf("%d",&t);
head=tail=NULL;
int size=sizeof(struct ListNode);
while(t!=-1)
{
p=(struct ListNode *)malloc(size);
p->data=t;
if(head==NULL)
{
head=p;
}else{
tail->next=p;
}
tail=p;
scanf("%d",&t);
}
tail->next=NULL;
return head;
}
struct ListNode *getodd( struct ListNode **L )
{
struct ListNode *p,*head,*tail,*head2,*tail2;
p=*L;
head=tail=head2=tail2=NULL;
while(p!=NULL)
{
if(p->data%2!=0)
{
if(head==NULL)
{
head=p;
}else{
tail->next=p;
}
tail=p;
p=p->next;
}else{
if(head2==NULL)
{
head2=p;
}else{
tail2->next=p;
}
tail2=p;
p=p->next;
}
}
tail->next=NULL;
tail2->next=NULL;
*L=head2;
return head;
}

2个回答

tail->next=NULL;
tail2->next=NULL;
放在最大的if和else里的p=p->next;后面
删除最后的tail->next=NULL;tail2->next=NULL;

qq_45224223
qh_45224223 我也想知道为什么这样就可以了,大佬能不能解释一下
3 个月之前 回复
Li_Jusong
大魔王! 请问为什么这样就可以了呢?
6 个月之前 回复

内存的指针有没有检查过啊

l15973239190
l15973239190 我不熟 我找不出问题在哪里
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
习题11-7 奇数值结点链表 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从...
PTA习题11-7 奇数值结点链表(20 分) 改进版
#include<stdio.h> #include<stdlib.h> #define N 20 typedef struct ListNode{ int Data; ListNode *Next; }ListNode; ListNode *readlist(); ListNode *getodd(ListNode **L); void printl...
习题11-7 奇数值结点链表 (20 分)
习题11-7 奇数值结点链表 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListN...
浙江大学 PTA 习题11-7 奇数值结点链表 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNod...
11-7 奇数值结点链表
奇数值结点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息。 链表结点定义: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNod...
习题11-7 奇数值结点链表 (20 point(s))
习题11-7 奇数值结点链表 (20 point(s)) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode...
奇数值结点链表 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ...
奇数值结点链表
习题11-7 奇数值结点链表   (20分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *
奇数值结点链表(pta)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:rnrnstruct ListNode rn int data;rn ListNode *next;rn;rn函数接口定义:rnrnstruct ListNode *readlist();rnstruct ListNode *getodd( struct ListNode **L );rn函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。rnrn函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。rnrn裁判测试程序样例:rnrn#include rn#include rnrnstruct ListNode rn int data;rn struct ListNode *next;rn;rnrnstruct ListNode *readlist();rnstruct ListNode *getodd( struct ListNode **L );rnvoid printlist( struct ListNode *L )rnrn struct ListNode *p = L;rn while (p) rn printf("%d ", p->data);rn p = p->next;rn rn printf("\n");rnrnrnint main()rnrn struct ListNode *L, *Odd;rn L = readlist();rn Odd = getodd(&L);rn printlist(Odd);rn printlist(L);rnrn return 0;rnrnrn/* 你的代码将被嵌在这里 */rnstruct ListNode *readlist() //从标准输入读入一系列正整数,按照读入顺序建立单链表rnrn struct ListNode *head,*tail;rn struct ListNode *p;rn int size =sizeof(struct ListNode);rn head = (struct ListNode*)malloc(size); //给头指针分配空间 rn head->next=NULL;rn p=head; //将当前头指针地址给指针p rn while(1) //无限循环,由循环内打破 rn tail = (struct ListNode*)malloc(size); //每次循环都会重新给尾指针分配空间 rn scanf("%d",&tail->data);rn if (tail->data==-1) p->next=NULL;break; //当输入-1时,p指针指向的下一个指针赋值为NULL然后结束循环 rn p->next=tail; //p->next第一次循环中等价于head->next,使其指向下一个指针 tail rn p=tail; //第一次循环中等价于head指针的p指针,变成等价于指针tail,tail变成了新的头 rn rn head = head->next; //当输入-1时,p->next=NULL,跳出了循环以实行该语句,使得head地址为第一个tail地址 rn rnrnrnstruct ListNode *getodd( struct ListNode **L ) //将单链表L中奇数值的结点分离出来,重新组成一个新的链表rnrn struct ListNode *head,*oddhead,*evenhead,*oddtail,*eventail,*odd,*even,*first,*temp;rn int size =sizeof(struct ListNode);rn head = (struct ListNode*)malloc(size);rn oddhead = (struct ListNode*)malloc(size); odd=oddhead;rn evenhead = (struct ListNode*)malloc(size); even=evenhead;rn oddhead->next=NULL;rn evenhead->next=NULL; rn head=*L;rn first=*L;temp=first; //代表传入的指针的首地址 rn if(head!=NULL)rn if(head->data%2!=0)oddhead=*L;odd=oddhead;rn if(head->data%2==0)evenhead=*L;even=evenhead;rn rnrnwhile(head->next!=NULL)rn if(head->next->data%2!=0) //从第二个节点开始判断 (奇数)rn head=head->next;rn oddtail=head;rn oddhead->next=oddtail;rn oddhead=oddtail;rn rn else if(head->next->data%2==0) //从第二个节点开始判断 (偶数) rn head=head->next;rn eventail=head;rn evenhead->next=eventail;rn evenhead=eventail;rn rnrnrn rn if(first->data%2==0) //第一个为偶数 rn rn *L=first;rn return odd->next; rn rn else //第一个为奇数 rn rn *L=even->next;rn return first;rn rnrn
PTA 奇数值结点链表
6-5 奇数值结点链表 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct...
浙大版《C语言程序设计(第3版)》题目集 - 习题11-7 奇数值结点链表(20 分)
题目链接:点击打开链接   题目大意:略。   解题思路:题目说删除了,其实可以转化为再搞一个获取奇数时的做法来做偶数的情况,最后把地址赋值给L,这样思路就简单许多~。还有这里带两个星号的L,其实多了一个星号是因为传参时,传进去的是指针变量的地址(此地址非内容)。   AC 代码 struct ListNode *readlist() { struct ListNode *...
C语言入门:奇数值节点链表
奇数值节点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的节点重新组成一个新的链表NEW,并输出新建链表的信息。试编写相应程序。 #include #include struct a { //结构a的定义 int n; struct a *next; } A; struct a *creat() //建立链
PTA 7-3 链表倒数n个结点的乘积 (20 分)
本题要求计算单链表倒数n个结点的乘积。例如,给出单链表1 2 3 4 5,则倒数2个结点的乘积为20。 输入格式: 输入有2行,第一个行为2个非负整数m和n。其中m为链表结点个数,n为链表倒数结点的数量。题目保证计算结果在int范围内。 第二行为链表的m个数,以空格分隔。 输出格式: 在一行中输出倒数n个结点的乘积。 输入样例: 5 2 1 2 3 4 5 输出样例: 20 ...
PTA习题11-8 单链表结点删除(20 分)
#include<stdio.h> #include<stdlib.h> typedef struct ListNode{ int Data; ListNode *Next; }ListNode; ListNode *readlist(); ListNode *deletem(ListNode *l,int m); void printlist(Li...
ultrawebtree的结点响应无效(20分,本人只有20分)
<%@ Register TagPrefix="ignav" Namespace="Infragistics.WebUI.UltraWebNavigator" Assembly="Infragistics.WebUI.UltraWebNavigator.v5.1, Version=5.1.20051.37, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" %> rn<%@ Register TagPrefix="componentart" Namespace="ComponentArt.Web.UI" Assembly="HsWebComponent" %> rn<%@ Page language="c#" Codebehind="DictionaryTree.aspx.cs" AutoEventWireup="false" Inherits="Handsome.CRM.HsBroker.hsbClient.DictionaryTree" %> rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrn刚开始学... rn以上是源代码, rn页面全部能够正常显示, rn但是在点击数据字典项的结点时,发现根本没响应,连NodeClick函数都没有进入,请教高手是怎么回事?
链表之链表的结点插入
师–链表的结点插入 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。 Input 多组输入。每组数据首先输入一个整数n(n∈[1...
习题2.1 简单计算器(20 分)
#include&amp;lt;stdio.h&amp;gt; int main() {   int a,b;   char c;   scanf(&quot;%d&quot;,&amp;amp;a);   scanf(&quot;%c&quot;,&amp;amp;c);   while(c!='=')   {     scanf(&quot;%d&quot;,&amp;amp;b);     if(c=='+') a=a+b;     else if(c=='-') a=a-b;     e...
习题8-7 字符串排序(20 分)
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。 输入格式: 输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。 输出格式: 按照以下格式输出排序后的结果: After sorted: 每行一个字符串 输入样例: red yellow blue green white 输出样例: After sorted: blue...
习题8-4 报数(20 分)********
#include &amp;amp;lt;stdio.h&amp;amp;gt; #define MAXN 20 void CountOff( int n, int m, int out[] ); int main(){ int outa[MAXN], n, m; int i; for(i=0;i<MAXN;i++){ outa[i]=0; } scanf(&amp;quot;%d %...
紫书 习题 11-7 UVa 10801 (单源最短路变形)
把每个电梯口看作一个节点, 然后计算边的权值的时候处理一下, 就ok了。#include&amp;lt;cstdio&amp;gt; #include&amp;lt;vector&amp;gt; #include&amp;lt;queue&amp;gt; #include&amp;lt;cmath&amp;gt; #define REP(i, a, b) for(int i = (a); i &amp;lt; (b); i++) using namespace std...
FlashBuilder_4_7_LS10_win64.z06(11-7)
FlashBuilder_4_7_LS10_win64.zip;FlashBuilder_4_7_LS10_win64.z01;FlashBuilder_4_7_LS10_win64.z02;FlashBuilder_4_7_LS10_win64.z03;FlashBuilder_4_7_LS10_win64.z04;FlashBuilder_4_7_LS10_win64.z05;FlashBuilder_4_7_LS10_win64.z06;FlashBuilder_4_7_LS10_win64.z07;FlashBuilder_4_7_LS10_win64.z08;FlashBuilder_4_7_LS10_win64.z09;FlashBuilder_4_7_LS10_win64.z010
链表——师--链表的结点插入
师–链表的结点插入 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。 Input 多组输入。每组数据首先输入一个整数n(n∈[1,100]),代表有n次操作。 接下来的...
链表:链表中环的入口结点
题目描述 一个链表中包含环,请找出该链表的环的入口结点。 方法一:思路:借助Collection容器来存储链表元素。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ import java.util.H
链表---链表中环的入口结点
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路: Python实现: // An highlighted block var foo = 'bar';
链表中环的入口结点(链表)
题目描述:一个链表中包含环,请找出该链表的环的入口结点。 public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 思路一: 1. 找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二步
【链表】链表中环的入口结点
此题出自牛客网的剑指offer专题 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 解题思路 为了方便讨论,这里我们可以画一张图 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程) 当快慢指针相遇的时候: 此时慢指针走的路程为Sslow = x + m * c + a 快指针...
链表的遍历(打印链表所有结点的值 ,返回链表的尾结点,输出该链表的结点个数,输出最大值结点的值)
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define N 10 typedef struct node{ int data; struct node* next; }ElemSN; //创建一个单向链表 ElemSN* CreatLink(int a[],int n) { ElemSN *head,*tail,*p; he...
无头结点链表的建立
本程序所实现的功能: 1.建立无头结点的线性链表 2.成功运行LOCATE(L,X)函数 3.成功运行DELETE(L,i)函数 4.成功运行INSERT(L,i,x)函数
无头结点链表实现
用C++简单实现无头结点的建表,插入,删除操作
关于链表的结点
输入一个链表,输出该链表中倒数第k个结点,k从1计数。  主要的难点在于链表只能从前往后遍历,不能从后往前遍历。一般的做法是:假设有n个结点,从头开始走第n-k+1个结点就是倒数第k个结点,但是要遍历两遍,第一遍药知道n是多少,第二遍再从头走n-k+1个结点。 一种更优的方法是:定义两个指针,第一个指针从头开始先走k-1,第二个指针不动;从第k步开始,两个指针一起走,当第一个指针走到链表尾结点
链表中环的入口结点
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 问题分析:设置两个指针,pSlow初始化为pHead,在后,走的慢;pFast初始化为pHead-&amp;gt;next,在前,走的快,二者一定会在环内相遇;二者相遇之后设置计数器,令指针沿着环走一圈,计算环中元素数量;设置两个指针p1和p2,令p1先走环中元素数量的位置,然后两个同时走,二者会在环入口相遇 /...
链表公共结点
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; typedef struct LNode{ int data ; struct LNode *next ; }LNode , *LinkList; LinkList Createlist( LinkList L){ int num ; LNode *p , *...
师--链表的结点插入
师--链表的结点插入 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。 Input 多组输入。每组数据首先输入一个整
java-带头结点的链表
程序小白,希望和大家多交流,共同学习 //带头结点的单向链表 import java.util.Scanner; public class MyLinkedList{ private static class MyNode{ private int data; private MyNode next; public MyNode(...
栈(带头结点链表)
#include &amp;lt;malloc.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode * next; } Lnode,*Li...
链表中的结点定义
struct Node rn int val; rn struct Node* next;rn;rnrntypedef struct linknode rn rn int data; rn struct linknode *next; rnnode; rnrn请说说这两种的区别和用法
结点与链表(求助!!!!)
我的理解是链表是结点的集合,所以我想定义结点为基类,链表为它的派生类。。是否可以这样。。rn如果可以如何实现??
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件