怎么将结点一个个插入在某个结点前面呢?
然后再在头结点的后面插入新的结点
首先要明确一点,利用头插法建立出来的单链表的输出都是逆序的(就是和你的输入顺序反着来的)然后就是要明确生成的新结点是一个个加在某个结点的前面的(这个结点不一定是头结点,下面的代码是插在p的前头),这就是头插法。
怎么将结点一个个插入在某个结点前面呢?下面的图可以比较详细的展示出来:
至少对我来说挺详细的哈
p->next=head->next; //一开始 head->next=NULL;
head->next=p;//然后将p指针指向head结点指向的下一个结点
以下是图像展示:
然后再在头结点的后面插入新的结点再执行一遍上面的代码, 然后head后面就连上了新的结点,p原本指向的结点前面也增加了一个新的结点,然后p就指向新加入的结点了。
以下是图像展示:
注!:要先写p->next=head->next,然后才能写head->next=p;因为如果先写head->next=p,然后再写head->next=p->next,结果就会变成head->next原本要指的是插入的结点,然后又p->next=head->next,那 head->next最后指向的就不是要插入的结点了,变成了p要指向的下一个结点,而p->next一开始就是NULL。
也就是说,新的节点根本就没连上去,p的前面根本没有插入新的结点,head->next也一直是NULL。(这段看不懂就不看了)
然后就是不断地重复上述过程,在头节点和新插入的节点之间建立联系,同时在新插入的节点和上一个插入的节点之间建立联系,最终得到一个完整的单链表。
以下是代码展示:
#include <bits/stdc++.h>
using namespace std;
//利用头插法建立的单链表输出都是逆序的
typedef struct node
{
int data;//数据域,存放数据
struct node *next;//指针域,存放指针,存放后继结点的信息
}no;//no是结构体的名字
int main()
{
no *head,*tail,*p;
head=new no;
head->next=NULL;
tail=head;
int n;
cin>>n;
while(n)
{
p=new no;
p->data=n;
p->next=head->next;//第一次的时候p->next指的是NULL,
//再往后,指的就是头结点后面的结点
head->next=p;//指针p也可以向前移动的哦,不一定就是要向后移动
cin>>n;
}
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return 0;
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。