关于书中两种简单的单向链表建立方法

 动态分配内存内存函数malloc 需要用到头文件#include 格式struct node *p=(struct node *)malloc(sizeof(struct node ));

返回值为动态分配内存的起始地址

1.正向建立链表 尾插法 尾动头不动

我们要正向建立链表的话就要知道新建立的节点的上一个节点,然后让一个节点指向它,因此我们可以考虑开一个结构体指针tail指向上一个节点,同时头指针 head(就是指向头节点的指针)保持不动,否则就找不到起始节点,第一次建立节点是由于没有上一个节点所以让头指针和tail指针都指向p ,head=NULL;//先让头指针指向空,借此判断是否为第一次建立节点,也可以避免如果没有建立节点,head进行后面的操作时为野指针。 同理tail也设置为NULL避免变为野指针 在节点的建立过程中应不断让指向上一个节点的tail指针指向的节点的next指针指向新建立的节点,tail->next=p,同时让tail指向新建立的节点p,因为,下一次建立时这个节点p就是相对于它的上一个节点

tail = p; struct node* p, * head = NULL, * tail = NULL;
while () 
{
   p = (struct node*)malloc(sizeof(struct node)); p.datemate->xxx; p->next = NULL;
	//此处设置p的next指向NULL;可以避免出现野指针,也可以使得链表的尾节点指向空。 
  if(head==NULL)//通过是否为NULL来判断节点是否为第一次建立 
  {
	  head=tail=p; //此时head和tail都指向头节点,在下一次建立时就不会进入这个判断。
  }
 else 
  {
	  tail->next = p; 
	  tail = p;
  }
}

2.头插法 头动尾不动 逆序建立链表

原理差不多不过少一个指针 让head指向NULL表示还未开始建立链表 然后head表示上一次建立的节点 然后让新建立的节点的next指针指向它,之后再将head指向新建立的节点。看起来就像是头指针一直在往前移动 

    struct node * p, * head = NULL, * tail = NULL; 
	while ()//循环条件
	{
	p = (struct node*)malloc(sizeof(struct node)); p.datemate = xxx; p->next = NULL;
	接着判断是否为第一个建立的节点 if (head == NULL)
		//通过是否为NULL来判断节点是否为第一次建立 
	{
		head = p; //此时head和tail都指向头节点,在下一次建立时就不会进入这个判断。 } 
	else { p->next = head; head = p; }
	}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值