zoukankan      html  css  js  c++  java
  • 从无头单链表中删除节点 结构之法 4

    题目:

        假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除。

    分析与解答:

    假设给定的指针为pCurrent,Node *pNext=pCurrent->next(pNext指向pCurrent所指节点的下一个节点。

    我们由pCurrent指向B,pNext(pCurrent->next)指向C,同理pNext->next(pCurrent->next->next)指向D,不过不能简单地删除B,因为那样会使得链表被分割。

    但是我们可以删除C,并通过pCurrent->next=pCurrent->next->next重新使链表连接,其中唯一丢失的是C中的data项。这时用C中的数据取代B中的数据项,让B成为C,然后将真正指向C的指针删除,这样就达到了目的。

    pCurrent->next=pNext->next;
    pCurrent->data=pNext->data;
    delete pNext;

    其实指针不过是内存中的地址而已,当处理这类题目时,先画出清晰的图表会很有帮助。

    扩展问题:

    编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。

    Node *p=head->next;
    Node *e=NULL;
    Node *q;
    while(p->next!=NULL)
    {
    q=p->next; //记录下一个节点
    p->next=e; //e记录的是转置之后的链表的第一个节点,
    e=p; //增加当前节点为转置的目标链表的第一个节点
    p=q; //待操作的链表的节点逐渐减少,目标链表逐渐增加
    }

  • 相关阅读:
    发送带有正文以及附件的邮件
    软件测试笔记
    java开发 中台
    postman测试带有json数据格式的字段
    maven详解之仓库
    Maven与nexus关系
    占位
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    了解facade设计模式
    postman使用
  • 原文地址:https://www.cnblogs.com/zdblog/p/3665531.html
Copyright © 2011-2022 走看看