【问题标题】:how to get head of the list after traversal in Linked lists?在链接列表中遍历后如何获得列表的头部?
【发布时间】:2016-09-04 14:01:15
【问题描述】:

我遍历了一个链表,最终在我修改了 head 中的一些元素之间达到了 NULL。如何通过这些修改取回头指针。

Node* temp=head;
while(head&&head->next){
    head=head->next->next;
}

我希望将链表修改为带有备用节点的新链表。所以在此之后我怎样才能取回新的头指针。

编辑:

ListNode* temp=head,*new1=head;
        while(head!=NULL&&head->next){
            new1->next=head->next->next;
            head->next=head->next->next;
            new1=new1->next;
        }
        //temp=head;
        return new1;

【问题讨论】:

  • 答案只能和问题一样好。发布Minimal Complete Verifiable Example 肯定会改善问题。
  • 只使用临时节点而不是head进行遍历,这样head保持不变
  • 我希望在该列表本身中对其进行修改
  • 您希望while 循环能为您做什么?你如何检查它是否做了正确的事情?如果您考虑可以添加哪些代码来仔细检查您打算发生的事情是否确实发生了,您通常可以回答自己的问题。
  • while循环将head的备用节点添加到新节点。

标签: c++ c linked-list singly-linked-list


【解决方案1】:

一种方法是使用不同的指针来遍历列表,而不管head

另一种方法是在完成后恢复head。您的代码似乎表明这是可能的,因为您在进入循环之前已将 head 存储在 temp 中。

head = temp;
new1 = temp;

【讨论】:

  • 但循环完成后 head 或 temp(traversed one) 将为 NULL。如何找回起始指针?
  • 我给你看了。将正确的值分配回变量。
  • 但是对跳过备用节点的链表所做的修改没有完成,它给出了相同的链表。
  • 我不明白您对提供相同链接列表的投诉与所提出的问题有何关系。
  • 我希望新的链表包含备用元素。我怎样才能得到它的头指针?
【解决方案2】:

我想你的意思是:

Node* temp = head;

while(temp && temp->next){
    temp = temp->next->next;
}

这样,你总是有头脑。

【讨论】:

  • 是的,这样更好,因为头节点保持不变+1票:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多