`
阿尔萨斯
  • 浏览: 4178802 次
社区版块
存档分类
最新评论

练习 删除链表中的重复节点、剩余节点逆序输出

 
阅读更多

题目描述:
输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
要求实现函数:
void vChanProcess(strNode * pstrIn,strNode * pstrOut);
【输入】 pstrIn:输入一个不带头节点的单向链表
【输出】 pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请)。
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7


/*
功能:  输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
    
输入:   pstrIn: 输入一个不带头节点的单向链表
    
输出:   pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。
     
返回:

示例:
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7
     
*/



int iChanProcess(strNode * pstrIn,strNode * pstrOut)
{
	int i,j,k,iint[100],jint[100],kint[100],p,q;
	i = 0;
	j = 0;
	if(pstrIn == 0)return 0; 
	while(pstrIn != 0){
		iint[i++] = pstrIn->data;
		pstrIn = pstrIn->pstrNext;
	}
	for(p = 0;p<i;p++){
		for(k = 0;k < p;k++){
			if(iint[p] == iint[k]){
				jint[j++] = iint[p];
				break;
			}
		}
	}
	k = 0;
	bool fuck;
	for(p = 0;p < i;p++){
		fuck = false;
		for(q = 0;q<j;q++){
			if(jint[q] == iint[p]){
				fuck = true;
				break;
			}
		}
		if(!fuck)
			kint[k++] = iint[p];
	}
	pstrOut->data = kint[k-1];
	strNode *n = pstrOut;
	strNode *m;
	for( p = k-2; p > -1;p--){
		m = new strNode;
		m->data = kint[p];
		n->pstrNext = m;
		m->pstrNext =0;
		n = m;
	}
	return 0;
}

/* 释放链表 */
void vFreeChan(strNode * pstrChan)
{
	strNode *s;
    while(pstrChan != 0){
		s = pstrChan->pstrNext;
		delete pstrChan;
		pstrChan = s;
	}
    return;
}




分享到:
评论

相关推荐

    C++链表编程 建表 排序 删除节点 逆序 输出

    C++链表还是比较有用的,建表与输出比较容易,排序与插入删除则难一些,我采用的方法是,将要处理的节点依次拿出并放在新的链表中,比较容易理解,也许不是最好的方法,但比交换数据好一点。

    逆序输出单向链表-Java 版本

    附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...

    链表的基本操作(插入、删除、显示,逆序等)

    实现了链表的基本操作,包括链表的建立、查找、插入、删除、显示、逆序等基本操作。

    建立一个带头节点的双向链表

    菜单:1.尾插法(用尾插法建立链表);2.头插法(用头插法建立链表);3.显示(打印链表);...16.修改元素(将链表中所有与指定元素相等的元素删除);17.销毁(销毁整个链表,无法再对链表进行其他操作);

    Java版逆序单向链表的实现

    附件是Java版逆序单向链表的实现,...代码首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了链表的逆序。reverseList方法使用三个指针prev、current和next来逆序链表,最后返回新的头节点。

    单向链表的逆序-Java版本

    附件是.java 文件,实现了单链表的逆序...首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了链表的逆序。reverseList方法使用三个指针prev、current和next来逆序链表,最后返回新的头节点。

    复旦大学C语言程序设计解答——链表部分3

    //第8题:复制链表。输入:一个无序正整数链表(输入为0表示终止)。 //输出:三行,每行一个链表,分别满足...复制原始链表比较简单,复制逆序链表和有序链表,必须是对链表的节点进行移动,不能只是修改节点上的值。

    单链表逆序详解

    单链表逆序详解   1、具有链表头的单链表 一段单链表逆序的程序  (2)取p3保留p2-&gt;next p3=p2-&gt;next;  将p2插入p1之前 p2-&gt;next = p1;  p1指向p2指向的节点 p1=p2;  p2指向p3指向的节点 p2=p3;

    链表创建,单链表反转,逆序打印等等

    链表是以节点的方式来存储 每个节点都包含一个data域和next域,data域用来存放数据,next域用来指向下一个节点 链表的各个节点不一定是连续存储的 先来看普通链表的代码是如何创建的 首先需要一个节点类,命名为Node...

    C/C++ 双链表之逆序的实例详解

    C/C++ 双链表之逆序的实例详解 一、结点结构  双向链表的数据结构定义如下:  ... 本文描述的是双向链表逆序,链表逆序需要维护3个指针,分别指向前一个节点、当前节点和下一个节点,具体代码如下:

    顺序链表C语言实现代码

    包括链表的正序创建和逆序创建,输出,删除插入一个节点,求链表长度,合并。

    List-of-the-reverse-output.rar_reverse list

    链表的逆序输出,给定一系列节点,单项链表逆序输出

    剑指offer算法题Python源码带详细思路注释(68道).zip

    链表中倒数第k个节点,链表中环的入口节点,两个合并排序的链表,两个链表的第一个公共节点,两个栈实现队列,平衡二叉树,扑克片顺子,青蛙跳台阶,求1+2+3+...+n,删除链表中重复的节点,数的子结构,数据流中的中位数,数值的...

    linkedlist_链表_

    单双链表的创建,节点的添加与删除,链表逆序,链表遍历。

    链表实现--singleList.c

    链表实现同时包括单链表逆序实现、求单链表倒数第N个数、用标尺法找单链表中间节点

    c 语言写的一个单链表 支持增、删、改、查、保存... 单链表的神器啊

    printf("5: 删除链表节点\n"); printf("6: 链表排序1\n"); printf("7: 链表排序2\n"); printf("8: 链表逆序\n"); printf("9: 销毁链表\n"); printf("0: 退出\n"); printf("w: 信息存储\n")

    这是Kotlin语言版本的 Android 客户端本地化算法展示 Java 语言编写的面试算法_kotlin_代码_下载

    栈和问题 设计一个有getMin功能的栈 ...26. 删除列表中的重复项 27. 去除元素 33.搜索旋转列表 35.搜索插件位置 42.接雨水 46.全排列 53.最大子序和 54. 右矩阵 56.合并区间 66.加一 78.子集 88.合并两个序列 118.杨辉

    《剑指Offer》题目及代码.zip

    13. O(1)时间删除链表节点 14. 使数组中的奇数位于偶数前面 15. 找链表中倒数第K个节点 16. 输出反转后的链表 17. 合并两个有序链表 18. 判断二叉树A中是否包含子树B 19. 二叉树的镜像 20. 顺时针打印矩阵 21...

    c++实现 不带头结点单链表基本操作

    利用c++实现不带头结点链表的基本操作实现,如逆序建立链表,插入、删除链表元素等。

    单链表的逆置的概要介绍与分析

    单链表逆置是数据结构学习和实践中常见的经典问题之一,它涉及到对单链表节点之间的链接关系进行重新排列,使得原本链表的末尾节点成为新的头部节点,而原来的头部节点移动到最后。解决单链表逆置问题的资源主要包括...

Global site tag (gtag.js) - Google Analytics