将一个链表中结点的值按奇偶拆分,使其中一个链表结点的值为偶数,另一个为奇数
2016-10-29 10:51
357 查看
这是一道笔试题,其实也挺简单,但是在当时笔试的时候,却怎么也想不出做不出来,最后还是写错了。事后在机器上又写了一下,这算是一个总结吧。
综其原因,还是自己平时程序写的少,想的少,从而导致在关键时候由于紧张想不出写不出。
平时就多练习吧。菜鸟多努力!
这个程序实现的功能就是:将一个链表中结点的值按奇偶拆分,使其中一个链表结点的值为偶数,另一个为奇数
具体程序如下:
综其原因,还是自己平时程序写的少,想的少,从而导致在关键时候由于紧张想不出写不出。
平时就多练习吧。菜鸟多努力!
这个程序实现的功能就是:将一个链表中结点的值按奇偶拆分,使其中一个链表结点的值为偶数,另一个为奇数
具体程序如下:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct node { int value; struct node *next; }Node,*pNode; pNode CreateList(int n) { pNode head,p,new; int i; printf("链表节点的值:"); head=(pNode)malloc(sizeof(Node)); scanf("%d",&(head->value)); head->next=NULL; p=head; for (i=0;i<n-1;i++) { new=(pNode)malloc(sizeof(Node)); scanf("%d",&(new->value)); p->next=new; p=new; } p->next=NULL; return head; } void display(pNode head) { while (head!=NULL) { printf("%d ",head->value); head=head->next; } printf("\n"); } void DivideList(pNode head,Node **odd,Node **even) { pNode p,q,r; assert(head!=NULL); while (head!=NULL) { p=head; if (p->value%2==0) { if (*even==NULL) { *even=p; q=*even; } head=head->next; q->next=p; q=p; q->next=NULL; } else { if (*odd==NULL) { *odd=p; r=*odd; } head=head->next; r->next=p; r=p; r->next=NULL; } } } void DestoryList(pNode head) { pNode p; while(head!=NULL) { p=head; head=head->next; free(p); } free(head); } int main() { int n; pNode head; pNode odd=NULL,even=NULL; printf("链表长度:"); scanf("%d",&n); head=CreateList(n); // display(head); DivideList(head,&odd,&even); display(odd); display(even); DestoryList(odd); DestoryList(even); system("pause"); return 0; }
相关文章推荐
- python 奇偶拆分list,python拆分list,得到一个原来list的奇数list,一个原来list的偶数list
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 《剑指offer》--- 在O(1)时间内删除链表结点 和 调整数组顺序使得奇数位于偶数前面
- 剑指Offer面试题14使数组中的奇数在偶数前,面试题15链表倒数第k个结点
- 将一个链表中的结点按照奇偶分成两个链表
- 将一个链表中的结点依照奇偶分成两个链表
- 把一个链表的奇数和偶数分开
- 定义一个由整数组成的数组,统计其中奇数和偶数的个数/和,并分为奇数偶数两个数组
- 将带有头结点head的单链表中序号为奇数的倒序,偶数不变
- 将一个整数线性表拆分成奇数和偶数线性表
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,
- 面试题 单向链表(无头结点)一个指针指向其中的一个结点,如何删除这个结点?
- 创建一个LinkedList,然后在其中插入多个值,确保每个值都插入到List中间(偶数中间两个数之一,奇数在正中间)
- 将数组的奇数移到前面偶数到后面&&输出链表的倒数第k个结点
- 输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是则输出“NOT” (要求用条件表达式进行判断,不使用if语句)
- Odd Even Linked List(奇偶链表,把所有第偶数个节点排到所有奇数个结点后面,相对顺序不变)
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表头文件C语言
- 一个偶数等于两个奇数之和,求组成偶数E的两个奇数的所有组合
- 用一个循环,先输出奇数在输出偶数
- 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针