C++ 单向链表 增加新节点

C++ 单向链表 增加新节点如何增加新节点啊?

单向链表的插入图示:
---->[NULL](原链表)
head

---->[1]---->[NULL](插入后的链表)
head 1->next

图7 空链表插入一个节点
结合原链表和插入后的链表,就很容易写出相应的代码。操作方法如下:
1、你要明白空链表head指向NULL就是head=NULL;
2、插入后head指向第1个节点,就是让head=1,1->next=NULL,OK这样就行了。

---->[1]---->[2]---->[3]...---->[n]---->[NULL](原链表)
head 1->next 2->next 3->next n->next

---->[1]---->[2]---->[x]---->[3]...---->[n]---->[NULL](插入后的链表)
head 1->next 2->next x->next 3->next n->next

图8:有N个节点的链表,插入一个节点(这里图示插入第2个后面)
结合原链表和插入后的链表,就很容易写出相应的代码。操作方法如下:
1、你要明白原1->next就是节点2,2->next就是节点3;
2、插入后x指向第3个节点,2指向x,就是让x->next=2->next,1->next=x。
*/
struct Node *Insert(struct Node *head, long num, struct Node *node)
{
struct Node *p1; /*p1保存当前需要检查的节点的地址*/

if (head == NULL) /*(结合图示7理解)*/
{
head = node;
node->next = NULL;
n += 1;
return head;
}

p1 = head;
while (p1->num != num && p1->next != NULL) /*p1指向的节点不是所要查找的,并且它不是最后一个节点,继续往下找*/
{
p1 = p1->next; /*后移一个节点*/
}

if (num == p1->num) /*找到了(结合图示8理解)*/
{
node->next = p1->next; /*显然node的下一节点是原p1的next*/
p1->next = node; /*插入后,原p1的下一节点就是要插入的node*/
n += 1; /*节点总数增加1个*/
}
else
{
printf(" %ld not been found! ",num);
}

return head;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-14
语句很简单
假设head 是链表的头指针
假设 list 为节点类型
list *p,*ptemp

p=(list *)malloc(sizeof(list));
ptemp=head->next;
head->next=p;
p->next=ptemp;
free(p)
第2个回答  2009-03-01
假设单链表类的名字是 mylist
struct mylist{
int data;
mylist* next;
}
假设头结点是head(mylist* head),那么将新增结点分三种情况:
1.在链表最前面添加结点,也即head的后面添加
bool add_node_before_head(mylist* h,mylist* node_to_add){//传入头结点和要添加的结点
if(h){
node_to_add->next=h->next;
h->next=node_to_add;
return true;
}
return false;
}

2.在链表的target_node后添加结点:
bool add_node_after_target(mylist* target_node,mylist* node_to_add){//传入目标结点和要添加的结点
if(target_node){
node_to_add->next=target_node->next;
target_node->next=node_to_add;
return true;
}
return false;
}

3.在链表的结点尾添加结点
bool add_node_at_end(mylist* h,mylist* node_to_add){//传入头结点和要添加的结点
if(h){
mylist* temp=h;
while(temp->next)temp=temp->next;//找到链表的最后一个结点,跳了循环
node_to_add->next=NULL;
temp->next=node_to_add;
return true;
}
return false;

这三个函数的调用方式如下:
head=create_list();//这个函数你自己写吧
mylist* p_node=new mylist;
p_node->data=20;
add_node_before_head(head,p_node);
add_node_after_target(head->next,p_node);
add_node_at_end(head,p_node);

希望可以帮到你~
第3个回答  2009-02-14
增加由 p 指向的结点,即将 *p 插入到结点 *s 之后,2条语句就够了:
p->next = s->next; // 使结点 *p 的指针域指向 *s 的下一个结点
s->next = p; // 使结点 *s 的指针域指向 *p
相似回答