亲宝软件园·资讯

展开

C语言头插法建立单链表

nefu_lmy 人气:0

首先要明确一点,利用头插法建立出来的单链表的输出都是逆序的(就是和你的输入顺序反着来的)然后就是要明确生成的新结点是一个个加在某个结点的前面的(这个结点不一定是头结点,下面的代码是插在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;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

加载全部内容

相关教程
猜你喜欢
用户评论