有两个链表a和b,设结点中包含学号、姓名。从a链表中删去与b链表中有相同学号的那些结点。
#include<stdio.h>
struct Node
{
int data;
struct Node *next;
};
//创建链表
struct Node *create(int n,int count)
{
int i;
struct Node *head,*p1,*p2;
head = p1 = p2 = (struct Node*)malloc(sizeof(struct Node));
head->data = n;
for(i=1; i<count; i++)
{
p1 = (struct Node*)malloc(sizeof(struct Node));
p1->data = i+n;
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
return head;
}
//从p1中删除和p2重复的
void delSame(struct Node *p1, struct Node *p2)
{
int flag;
struct Node *p11,*p22,*t;
p11 = p1;
p22 = p1;
while(p11 != NULL)
{
flag = 0;
while(p22 != NULL)
{
if(p11->data == p22->data)
{
printf("删除%d\n", p11->data);
t = p11->next;
p11->data = t->data;
p11->next = t->next;
free(t);
flag = 1;
break;
}
p22 = p22->next;
}
p22 = p2;
if(flag == 0)
{
p11 = p11->next;
}
}
}
void main()
{
struct Node *p1,*p11,*p2,*p22,*p3;
//创建链表
p11 = p1 = create(3,5);
p22 = p2 = create(0,7);
printf("链表1初始数据:\n");
while(p1)
{
printf("%d\n", p1->data);
p1 = p1->next;
}
printf("\n链表2初始数据:\n");
while(p2)
{
printf("%d\n", p2->data);
p2 = p2->next;
}
printf("\n从链表1中删去与链表2相同的结点后的链表1的内容:\n");
delSame(p11,p22);
while(p11)
{
printf("%d\n", p11->data);
p11 = p11->next;
}
}
分享到:
相关推荐
在Python编程中,链表是一种常见数据结构,用于存储一系列有序元素。...在Python中,链表操作通常涉及对`ListNode`类的实例进行操作,`ListNode`包含一个`val`属性表示节点值和一个`next`属性指向下一个节点。
这个函数首先检查链表是否为空,然后删除头节点,更新`first`为第二个节点(现在是新的头节点),最后调用`DelNode_even()`来删除剩余的奇数节点。 ### 运行示例 你可以创建一个链表,然后让用户选择删除奇数或...
- 链表中有多个X节点,此问题仅要求删除第一个,所以在找到第一个X节点后,应立即停止搜索并删除。 4. **算法实现**: - 使用伪代码表示如下: ``` function deleteFirstXNode(head, X): if head is null or ...
首先通过`new`操作符创建第一个节点,并从用户那里获取初始数据。然后进入循环,直到用户输入学号为0为止。每次循环都会将新节点添加到链表末尾。 ##### 3. 显示链表 ```cpp void dispStLink(stNode *head) { ...
在这种情况下,我们需要遍历链表找到倒数第二个节点(即不是尾结点的节点),然后让这个节点的next指针设为null,从而断开与尾结点的链接,最后删除尾结点。 ```cpp ListNode* node = *head; while (node->next !=...
当遍历第二个链表(较长的那个)时,我们检查每个节点是否在哈希表中。如果在,那么这个节点就是交集的一部分,可以将其添加到结果链表中。 另一种方法是使用双指针技术。首先,我们将两个链表的头节点连接在一起,...
本文将详细讲解如何使用C语言在Microsoft Visual C++ 6.0环境下实现单向链表的创建、插入、删除节点以及两个链表的合并。 一、单向链表的基本概念 单向链表是一种线性数据结构,每个元素(称为节点)包含两部分:...
如果是,更新头节点为`head->next`,即将头节点指向第二个节点。 3. 接下来,我们遍历链表,用`pre`指针指向当前节点的前一个节点,用`head`指针保持对链表头的引用。在循环中,我们需要检查`pre->next`(即当前节点...
如果选择的节点是来自第一个链表,那么我们需要移动第二个链表的头节点到它的下一个节点,反之亦然。重复这个过程,直到有一个链表为空。最后,未空的链表就是剩余部分,将其连接到新链表的末尾即可。 这个算法的...
在这个问题中,我们需要找到一个链表中倒数第k个节点。这个问题有多种解决方案,这里提供了两种方法:第一种是通过两次遍历链表,第二种是使用双指针一次遍历链表。 **方法一:两次遍历链表** 首先,我们来看第一...
最直接的方法是遍历第一个链表中的每一个节点,并检查这些节点是否出现在第二个链表中。具体来说,对于第一个链表中的每一个节点,都从第二个链表的头部开始逐一比较。如果找到匹配的节点,则说明两个链表相交;否则...
4. **特殊情况处理**:如果插入的是链表的第一个节点,需要更新头节点;如果插入的是链表的最后一个节点,需要更新尾节点。 5. **释放内存**:完成插入操作后,记得释放不再使用的资源,防止内存泄漏。 在VC6.0...
在Python中,链表节点可以通过类实现,节点的下一个节点通过对象引用表示。 通过实践这些操作,你将加深对链表工作原理的理解,并能灵活运用到实际问题中。此外,熟悉链表操作对理解和解决更复杂的数据结构和算法...
在 `main` 函数中,我们先构建一个链表,然后调用 `print` 函数显示源链表,接着调用 `findKnode` 查找倒数第5个节点,并输出结果。测试用例包括空链表、正常链表(k小于等于链表长度)以及无效k值(k大于链表长度)...
- 示例 1:输入的链表 head = [4,5,1,9],要删除的节点值为 5,即第二个节点。删除后链表应变为 4 -> 1 -> 9。 - 示例 2:输入的链表 head = [4,5,1,9],要删除的节点值为 1,即第三个节点。删除后链表应变为 4 -> 5...
### 数据结构:链表——查找倒数第N个节点与中间节点 #### 一、基础知识回顾 在深入了解本文档中的代码之前,我们首先简要回顾一下链表的基础知识。 **链表**是一种线性表的数据结构,其特点是通过指针连接各个...
该函数根据指定的数据值`nodedata`删除链表中的第一个匹配项。如果找到了匹配的节点,则将其从链表中移除。 ```c structLink*DeleteNode1(structLink*head,intnodedata) { // ...代码实现... } ``` 2. **...
根据给定的信息,本文将详细解释“二叉链表叶子节点的输出”这一主题,包括相关的数据结构定义、创建二叉树的过程、遍历方法以及如何统计并输出叶子节点的数量。 ### 一、数据结构定义 在C语言中,二叉树通常通过...
在链表的开头,我们有一个特殊的节点称为头结点,它的数据域通常不存储任何信息,但其指针域指向链表中的第一个实际节点。 对于这个特定的练习,我们需要实现以下功能: 1. 查找:根据城市名或位置坐标查找特定...