题解 | #牛牛的链表添加节点#
牛牛的链表添加节点
http://www.nowcoder.com/practice/e33b79c2e15a41f9b541e73cd256124a
看注释吧。 相当于是新建一个将要插入的结点。此时其地址为NULL。
所以需要将插入位置前的地址赋给新节点,让新节点,指向插入位置后的第一个结点。
然后再让插入位置前的最后一个结点指向新结点。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int N,val,i;
struct ListNode
{
int data;
struct list_node *next;
};
typedef struct ListNode set;//链表结构体起别名
set *creat_list_node(int r_data)//创建一个链表结点
{
set *creat_node=NULL;//头结点
creat_node=(set*)malloc(sizeof(set));//申请空间
memset(creat_node,0,sizeof(set));//清零
creat_node->data=r_data;//写入数据
creat_node->next=NULL;//写入地址
return creat_node;
}
set *tail_node(set *Headnode, int t_data)
{
set *new_node=creat_list_node(t_data);//将要插入的内容
set *insert_node=Headnode;//确定头结点位置
while(insert_node->next!=NULL)//判断是否为表尾
{
insert_node=insert_node->next;//如果不是,指向下一个。
}
insert_node->next=new_node;//新结点的内容写入末尾结点的下一个。
return insert_node->data; //返回新插入表中的值
}
set *print_node(set *HeadNode)
{
set *pri_node=HeadNode->next;
while(pri_node!=NULL)
{
printf("%d ",pri_node->data);
pri_node=pri_node->next;
}
printf("\n");
return pri_node->data;
}
set *ins_node(set *Headnode, int t_data)
{
set *new_node=creat_list_node(t_data);
set *in_node=Headnode->next;
i=1;
while(i!=t_data)//移动到要插入的位置
{
in_node=in_node->next;
i++;
}
new_node->next =in_node->next;//把插入位置的下一个结点的地址赋给将插入的新结点,新结点获取到新地址,指向了插入位置的下一个结点。
in_node->next=new_node;//让插入位置的地址指向新结点。
//->next在
//左侧是指向
//右侧是地址
return in_node;
}
int main()
{set *Headnode=creat_list_node(N);//确定头结点位置
scanf("%d %d\n",&N,&i);
{
for(int i=0;i<N;i++)
{
scanf("%d\n",&val);//收
tail_node(Headnode, val);//插
}
ins_node(Headnode, i);
print_node(Headnode);
free(Headnode);
}
}