| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3436 人关注过本帖
标题:关于删除链表节点的 看看错在哪里(代码是copy自互联网)
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:8 
关于删除链表节点的 看看错在哪里(代码是copy自互联网)
程序代码:
Node *Delete(Node *head,int key)
{
    Node *node1=head;
    Node *node2=NULL;
    if (head==NULL)
    {
        return NULL;
    }
    else
    {
        if (node1->number==key)
        {
            head=head->next;
            free(node1);
            return head;
        }
        else
        {
            while (node1!=NULL)
            {
                node2=node1;
                node2=node2->next;
                if (node2->number==key)
                {
                   node1->next=node2->next;
                   free(node2);
                   break;
                }
                node1=node1->next;
            }
            return head;
        }
    }
}
搜索更多相关主题的帖子: 互联网 number 
2017-03-14 16:06
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
本来就不熟悉链表  这变量名起的 看着都迷糊  
虽然从网上又找了一款删除单链表的函数版本 并且实验成功  但是自己从头写 还是写不来啊

DO IT YOURSELF !
2017-03-14 16:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用rjsp在2017-3-14 16:15:58的发言:

node2=node2->next;
if (node2->number==key) // 此时 node2 可能为 NULL
不是这样的  
我测试的结果是 她会把我目标的下一个记录给删掉
比如
aa
bb
cc
dd
ee
我想删除 cc  她会删掉dd

稍后我会测试你的代码  谢谢

DO IT YOURSELF !
2017-03-14 16:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 5楼 rjsp
你这段代码编译运行都没有问题
程序代码:
typedef struct node
{
    char str[256];
    struct node* next;
}tnode,*pnode;

tnode* delrjsp(tnode* head, char* key )
{
    tnode anchor;
    anchor.next = head;
    for( pnode p=&anchor; p->next; p=p->next )
    {
        if( strcmp(p->next->str,key)==0 )
        {
            pnode tmp = p->next->next;
            free( p->next );
            p->next = tmp;
        }
    }
    return anchor.next;
}

请帮我解释一下 本例子中的node tnode 有啥区别  为啥在网上 有的struct 后面跟一个变量 跟一个指针
而有的啥也没有


[此贴子已经被作者于2017-3-14 16:46编辑过]


DO IT YOURSELF !
2017-03-14 16:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 8楼 renkejun1942
typedef struct NODE {
    int Value;
    struct NODE *Next;
}Node;

这里的NODE Node 有啥区别  后者不写 可否  还有你的函数里怎么那么多二级指针啊

DO IT YOURSELF !
2017-03-14 17:40
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用renkejun1942在2017-3-14 17:44:02的发言:

用二级指针,可以不要返回值。
 
你说的就是别名啊,用typedef取的别名。
 
struct NODE 是类型。
Node 是别名。
 
敲代码的时候,可以少敲几个字符。
 
我写的最好的就是单链表,我看好多书上还没我写的好。
  就是说 应该 struct NODE xxx  那么 Node xxx 就可以了

DO IT YOURSELF !
2017-03-14 17:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 13楼 mnmn4429
不行 改完 还是原来的结果  删除目标节点的下一个节点数据 代码
程序代码:
typedef struct node
{
    char str[256];
    struct node* next;
}tnode,*pnode;


tnode *delw(tnode *head,char* key)
{
    struct node *node1=head;
    struct node *node2=NULL;
    if (head==NULL)
    {
        return NULL;
    }
    else
    {
        if (strcmp(node1->str,key)==0)
        {
            head=head->next;
            free(node1);
            return head;
        }
        else
        {
            while (node1!=NULL)
            {
                node2=node1;
                node2=node2->next;
                if (strcmp(node1->str,key)==0)
                {
                   node1->next=node2->next;
                   free(node2);
                   break;
                }
                node1=node1->next;
            }
            return head;
        }
    }
}


DO IT YOURSELF !
2017-03-14 18:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
有一个疑问啊
Node* tmp=p->next->next;
咋来这么多next呢  那是不是 Node* tmp=p->next->next->next->next 都可以啊

DO IT YOURSELF !
2017-03-14 21:26
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用炎天在2017-3-14 18:33:13的发言:

13楼说的不对,
        else
        {
            while (node1->next!=NULL)
            {
                node2=node1;
                node2=node2->next;
                if (strcmp(node2->str,key)==0)
                {
                   node1->next=node2->next;
                   free(node2);
                   break;
                }
                node1=node1->next;
            }
            return head;
        }
这个对  能正确删除

DO IT YOURSELF !
2017-03-14 21:28
快速回复:关于删除链表节点的 看看错在哪里(代码是copy自互联网)
数据加载中...
 
   



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

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