`
zy3381
  • 浏览: 157517 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

删除第一个链表中与第二个链表重复的节点

 
阅读更多
有两个链表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 删除链表中倒数第N个节点(csdn)————程序.pdf

    在Python编程中,链表是一种常见数据结构,用于存储一系列有序元素。...在Python中,链表操作通常涉及对`ListNode`类的实例进行操作,`ListNode`包含一个`val`属性表示节点值和一个`next`属性指向下一个节点。

    数据结构 链表节点的删除

    这个函数首先检查链表是否为空,然后删除头节点,更新`first`为第二个节点(现在是新的头节点),最后调用`DelNode_even()`来删除剩余的奇数节点。 ### 运行示例 你可以创建一个链表,然后让用户选择删除奇数或...

    删除循环双链表中的第一个X

    - 链表中有多个X节点,此问题仅要求删除第一个,所以在找到第一个X节点后,应立即停止搜索并删除。 4. **算法实现**: - 使用伪代码表示如下: ``` function deleteFirstXNode(head, X): if head is null or ...

    建立一个学生链表

    首先通过`new`操作符创建第一个节点,并从用户那里获取初始数据。然后进入循环,直到用户输入学号为0为止。每次循环都会将新节点添加到链表末尾。 ##### 3. 显示链表 ```cpp void dispStLink(stNode *head) { ...

    16.删除链表的节点1

    在这种情况下,我们需要遍历链表找到倒数第二个节点(即不是尾结点的节点),然后让这个节点的next指针设为null,从而断开与尾结点的链接,最后删除尾结点。 ```cpp ListNode* node = *head; while (node-&gt;next !=...

    两个链表求交集(链表基础练习)

    当遍历第二个链表(较长的那个)时,我们检查每个节点是否在哈希表中。如果在,那么这个节点就是交集的一部分,可以将其添加到结果链表中。 另一种方法是使用双指针技术。首先,我们将两个链表的头节点连接在一起,...

    C语言实现单向链表的创建、插入,删除节点,和2个链表合并

    本文将详细讲解如何使用C语言在Microsoft Visual C++ 6.0环境下实现单向链表的创建、插入、删除节点以及两个链表的合并。 一、单向链表的基本概念 单向链表是一种线性数据结构,每个元素(称为节点)包含两部分:...

    删除链表的节点1

    如果是,更新头节点为`head-&gt;next`,即将头节点指向第二个节点。 3. 接下来,我们遍历链表,用`pre`指针指向当前节点的前一个节点,用`head`指针保持对链表头的引用。在循环中,我们需要检查`pre-&gt;next`(即当前节点...

    两个链表的合并

    如果选择的节点是来自第一个链表,那么我们需要移动第二个链表的头节点到它的下一个节点,反之亦然。重复这个过程,直到有一个链表为空。最后,未空的链表就是剩余部分,将其连接到新链表的末尾即可。 这个算法的...

    20.链表中倒数第k个节点1

    在这个问题中,我们需要找到一个链表中倒数第k个节点。这个问题有多种解决方案,这里提供了两种方法:第一种是通过两次遍历链表,第二种是使用双指针一次遍历链表。 **方法一:两次遍历链表** 首先,我们来看第一...

    编程判断两个链表是否相交

    最直接的方法是遍历第一个链表中的每一个节点,并检查这些节点是否出现在第二个链表中。具体来说,对于第一个链表中的每一个节点,都从第二个链表的头部开始逐一比较。如果找到匹配的节点,则说明两个链表相交;否则...

    向双链表中插入节点C和指针第十二章编程练习6

    4. **特殊情况处理**:如果插入的是链表的第一个节点,需要更新头节点;如果插入的是链表的最后一个节点,需要更新尾节点。 5. **释放内存**:完成插入操作后,记得释放不再使用的资源,防止内存泄漏。 在VC6.0...

    实验二 链表基本操作的实现

    在Python中,链表节点可以通过类实现,节点的下一个节点通过对象引用表示。 通过实践这些操作,你将加深对链表工作原理的理解,并能灵活运用到实际问题中。此外,熟悉链表操作对理解和解决更复杂的数据结构和算法...

    C语言实现输出链表中倒数第k个节点

    在 `main` 函数中,我们先构建一个链表,然后调用 `print` 函数显示源链表,接着调用 `findKnode` 查找倒数第5个节点,并输出结果。测试用例包括空链表、正常链表(k小于等于链表长度)以及无效k值(k大于链表长度)...

    删除链表中的节点(仅仅传入删除节点 无头结点+无遍历)1

    - 示例 1:输入的链表 head = [4,5,1,9],要删除的节点值为 5,即第二个节点。删除后链表应变为 4 -&gt; 1 -&gt; 9。 - 示例 2:输入的链表 head = [4,5,1,9],要删除的节点值为 1,即第三个节点。删除后链表应变为 4 -&gt; 5...

    数据结构 链表 查找倒数第N个节点的值 查找中间节点的值

    ### 数据结构:链表——查找倒数第N个节点与中间节点 #### 一、基础知识回顾 在深入了解本文档中的代码之前,我们首先简要回顾一下链表的基础知识。 **链表**是一种线性表的数据结构,其特点是通过指针连接各个...

    单项链表的建立,插入 ,删除,显示节点信息,释放动态内存.txt

    该函数根据指定的数据值`nodedata`删除链表中的第一个匹配项。如果找到了匹配的节点,则将其从链表中移除。 ```c structLink*DeleteNode1(structLink*head,intnodedata) { // ...代码实现... } ``` 2. **...

    二叉链表叶子节点的输出

    根据给定的信息,本文将详细解释“二叉链表叶子节点的输出”这一主题,包括相关的数据结构定义、创建二叉树的过程、遍历方法以及如何统计并输出叶子节点的数量。 ### 一、数据结构定义 在C语言中,二叉树通常通过...

    城市链表 数据结构链表练习

    在链表的开头,我们有一个特殊的节点称为头结点,它的数据域通常不存储任何信息,但其指针域指向链表中的第一个实际节点。 对于这个特定的练习,我们需要实现以下功能: 1. 查找:根据城市名或位置坐标查找特定...

Global site tag (gtag.js) - Google Analytics