根据结点的值域奇偶性分离成两个链表
来源:互联网 发布:视频编辑软件下载 编辑:程序博客网 时间:2024/05/14 04:10
题目:如题
———-代码演示
#include <stdio.h>#include <stdlib.h>#define ERROR NULLtypedef enum {false, true} bool;typedef int ElementType;typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode Position;typedef PtrToLNode List;List MakeEmpty();bool Insert( List L, ElementType X, Position P );void deperateByEvenOrOdd(List L ,List B);int main(){ List L,B; ElementType X; Position P; int N; L = MakeEmpty(); B = MakeEmpty(); scanf("%d", &N); while ( N-- ) { scanf("%d", &X); Insert(L, X, L->Next); } printf("before delete:\n"); for ( P=L->Next; P; P = P->Next ) printf("%d ", P->Data); printf("after delete:\n"); deperateByEvenOrOdd(L,B); for ( P=L->Next; P; P = P->Next ) printf("%d ", P->Data); printf("after delete print List B:\n"); for ( P=B->Next; P; P = P->Next ) printf("%d ", P->Data); return 0;}List MakeEmpty(){ List L =(List)malloc(sizeof(struct LNode)); L->Next = NULL; return L;}/* 带头结点的插入 注意这里是倒序插入,测试的时候输入数据的时候要小心一下*/bool Insert( List L, ElementType X, Position P ){ /* 这里默认L有头结点 */ Position temp, pre; /* 查找P的前一个结点,这里最开始没想到for循环不需要写循环体内程序就可以了 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL ) { /* P所指的结点不在L中 */ printf("Wrong Position for Insertion\n"); return false; } else { /* 找到了P的前一个结点pre */ /* 在P前插入新结点 */ temp = (Position)malloc(sizeof(struct LNode)); /* 申请、填装结点 */ temp->Data = X; temp->Next = P; pre->Next = temp; //刚开始忘记写return true; return true; }}/*犯的错误:1、思路上错误,自己耍小聪明,直接用pa = L->Next;之后直接用pa ,这种做法的错误在于没有考虑到想要删除结点,必须有她的前驱才可以,你直接把pa 当做要移动的结点,那 pa 的前驱根本没办法获得,而正确答案,用pa->Next表示要移动的值为偶数的结点,这样就可以用pa 来表她的前驱,从而实现移动结点;这个错误也算经典了,犯了两次了,应该要记住!!!*/void deperateByEvenOrOdd(List L ,List B){ if(L == NULL )return; List pa,pb,even; // B = MakeEmpty();B 的初始化放在了主函数中,否则会有warning pa = L; pb = B; while(pa->Next){ if(pa->Next->Data %2 == 0){ even = pa->Next; pa->Next = even->Next; even->Next = NULL; pb->Next = even; pb = even; } else{ pa = pa->Next; } }}
0 0
- 根据结点的值域奇偶性分离成两个链表
- 单链表分离值域为奇偶的两个链表
- 两个链表的公共结点
- 两个链表的公共结点
- 两个链表的公共结点
- C++两个链表的公共结点
- 两个链表公共结点
- 找出两个链表的第一个公共结点--总结
- 找出两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- Android:Service生命周期最全面解析
- HTML常用标签整理(b类)
- zabbix3.0.2 使用percona的mysql插件的遇到的诡异问题解决记录
- hduoj1028 母函数
- 【Cocos2d-x】集成wxSqlite3到Cocos2d-x
- 根据结点的值域奇偶性分离成两个链表
- LeetCode No.375 Guess Number Higher or Lower II
- Swift 3.0 实现图片轮播器
- Spark中文手册8:spark GraphX编程指南(1)
- Java - 趣味题(5) --- Windows 下制图
- PHP获取ip与ip所在城市
- PHP递归算法的简单实例
- Ubuntu下两个gcc版本切换
- 关于Spring框架的Ioc&DI的相关知识