题目描述:
输入一个不带头节点的单向链表(链表的节点数小于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++链表还是比较有用的,建表与输出比较容易,排序与插入删除则难一些,我采用的方法是,将要处理的节点依次拿出并放在新的链表中,比较容易理解,也许不是最好的方法,但比交换数据好一点。
实现了链表的基本操作,包括链表的建立、查找、插入、删除、显示、逆序等基本操作。
菜单:1.尾插法(用尾插法建立链表);2.头插法(用头插法建立链表);3.显示(打印链表);...16.修改元素(将链表中所有与指定元素相等的元素删除);17.销毁(销毁整个链表,无法再对链表进行其他操作);
//第8题:复制链表。输入:一个无序正整数链表(输入为0表示终止)。 //输出:三行,每行一个链表,分别满足...复制原始链表比较简单,复制逆序链表和有序链表,必须是对链表的节点进行移动,不能只是修改节点上的值。
单链表逆序详解 1、具有链表头的单链表 一段单链表逆序的程序 (2)取p3保留p2->next p3=p2->next; 将p2插入p1之前 p2->next = p1; p1指向p2指向的节点 p1=p2; p2指向p3指向的节点 p2=p3;
链表是以节点的方式来存储 每个节点都包含一个data域和next域,data域用来存放数据,next域用来指向下一个节点 链表的各个节点不一定是连续存储的 先来看普通链表的代码是如何创建的 首先需要一个节点类,命名为Node...
C/C++ 双链表之逆序的实例详解 一、结点结构 双向链表的数据结构定义如下: ... 本文描述的是双向链表逆序,链表逆序需要维护3个指针,分别指向前一个节点、当前节点和下一个节点,具体代码如下:
包括链表的正序创建和逆序创建,输出,删除插入一个节点,求链表长度,合并。
链表的逆序输出,给定一系列节点,单项链表逆序输出
单双链表的创建,节点的添加与删除,链表逆序,链表遍历。
链表实现同时包括单链表逆序实现、求单链表倒数第N个数、用标尺法找单链表中间节点
printf("5: 删除链表节点\n"); printf("6: 链表排序1\n"); printf("7: 链表排序2\n"); printf("8: 链表逆序\n"); printf("9: 销毁链表\n"); printf("0: 退出\n"); printf("w: 信息存储\n")
栈和问题 设计一个有getMin功能的栈 ...26. 删除列表中的重复项 27. 去除元素 33.搜索旋转列表 35.搜索插件位置 42.接雨水 46.全排列 53.最大子序和 54. 右矩阵 56.合并区间 66.加一 78.子集 88.合并两个序列 118.杨辉
13. O(1)时间删除链表节点 14. 使数组中的奇数位于偶数前面 15. 找链表中倒数第K个节点 16. 输出反转后的链表 17. 合并两个有序链表 18. 判断二叉树A中是否包含子树B 19. 二叉树的镜像 20. 顺时针打印矩阵 21...
利用c++实现不带头结点链表的基本操作实现,如逆序建立链表,插入、删除链表元素等。
因为题目要求返回的顺序是从尾到头,所以我们可以采用递归的形式访问链表,在回归的过程才将节点的值存入ArrayList中,以达到逆序的目的。 /** * public class ListNode { * int val; * ListNode next = null; * * ...
其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头...
这里用C++构造了一个双向链表,提供了对双向链表的插入、查找、删除节点、排序等功能,其中排序提供了插入排序和冒泡排序两种方式 #include using namespace std; class Node //组成双向链表的节点 { public: ...
链接:数组中的逆序对 来源:LeetCode——《剑指-Offer》专项 2. 题目说明 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8...