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; //待操作的链表的节点逐渐减少,目标链表逐渐增加
    }

  • 相关阅读:
    WPF之感触
    C# WinForm 给DataTable中指定位置添加列
    MyEclipse 8.6 download 官方下载地址
    将博客搬至CSDN
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
    Building Microservices with Spring Cloud
  • 原文地址:https://www.cnblogs.com/zdblog/p/3665531.html
Copyright © 2011-2022 走看看