标题:在函数中改变指针的问题。
只看楼主
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
已结贴  问题点数:20 回复次数:3 
在函数中改变指针的问题。
程序代码:
#include <iostream>
#include <queue>
using namespace std;

typedef struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
}ListNode;

ListNode* f(ListNode *h2)
{
    ListNode *h3=h2,*res=h2;
   queue<ListNode *> q;
   while(h2)
   {
       q.push(h2);
       h2=h2->next;
   }

   while(!q.empty())
   {
       ListNode *t=q.front();
       if(t->val==4)//当值为4时改变链表的结构,不把值为四的结点接入到链表中
        {
            q.pop();
            continue;
        }
        h3=t;
        h3=h3->next;
        q.pop();
   }
    return res;//这里不应该是返回一个新的不含有四结点的链表吗?
}
int main()
{
    ListNode *head=new ListNode(1);
    ListNode *h=head,*h1=head;
    h->next=new ListNode(2);
    h=h->next;
    h->next=new ListNode(3);
    h=h->next;
    h->next=new ListNode(4);
    h=h->next;
    h->next=new ListNode(5);

   ListNode *t=f(head);
    while(t)
    {
        cout<<t->val<<endl;
        t=t->next;
    }
    return 0;
}
搜索更多相关主题的帖子: 函数 改变 next head new 
2019-05-05 19:20
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:20 
1->2->3->4->5->NULL
res指向第一个节点
无论是第一个while循环还是第二个while循环,都只是指针h2和h3的改变,对整个链表一点影响都没有

比如:
//h3指向t指向的这个节点,然后h3指向下一个节点,对整个链表的结构有影响吗???
h3=t;
h3=h3->next;

//除非值为3的节点的next指针不再指向值为4的节点,而指向值为5的节点,链表结构才发生改变
2019-05-05 19:43
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
//修改建议
h3->next = t;
h3=h3->next;
2019-05-05 19:47
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 3楼 word123
好的谢谢
2019-05-06 09:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494563-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.152473 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved