PTA.奇数值结点链表(C语言)

题干:

裁判程序:

样例:

先说思路吧,我想的是把原链表分为奇数链表和偶数链表,但不去开辟空间(malloc),这样就可以达到节省时间和空间的目的。

参考代码:

struct ListNode *readlist()//这里是一个尾插法创建链表struct ListNode *head = NULL, *tail = NULL;do{struct ListNode *p = (struct ListNode*)malloc(sizeof(struct ListNode));p->next = NULL;scanf("%d", &p->data);if((p->data)!=-1){if(head){tail->next = p;tail = p;}else{head = tail = p;}}elsebreak;} while (1);return head;
}struct ListNode *getodd( struct ListNode **L )
{struct ListNode *oddhead = NULL, *oddtail = NULL;//oddhead和oddtail分别代表奇数链表的头结点和尾结点struct ListNode *temp = *L, *tail=NULL;//temp用于原链表遍历,tail代表偶数链表的尾结点*L=NULL;//此函数结束后,L将代表偶数链表的头结点//由于L的数据已经被temp继承,所以这里的修改并没有什么问题int judge = 1;//judge用于判断temp遍历的结点的数据是否是链表之中的第一个偶数//1为是,找到第一个偶数后改为0且不再变动以防止误判while(temp){if((temp->data)%2)//判断数据奇偶性{                 //数据对2取余后,值只能为1或0,值为1时进if分支,值为0时进else分支if(oddhead){oddtail->next = temp;oddtail = temp;}else{oddhead = oddtail = temp;}}else{if(judge){(*L) = tail = temp;judge = 0;}else{tail->next = temp;tail = temp;}}//以上,用尾插法分别创建了两个链表,if分支为奇数,else为偶数temp = temp->next;//temp后移进行遍历}if(oddtail)//若尾结点不为空则给奇数链表封尾oddtail->next = NULL;if(tail)//若尾结点不为空则给偶数链表封尾tail->next = NULL;return oddhead;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部