带头结点和不带头结点的单链表的尾插法以及各种操作

本文详细介绍了带头结点和不带头结点的单链表的创建、尾插法插入元素以及删除节点的操作。通过示例代码展示了如何在不同位置进行插入和删除,并强调了在插入时注意字符的处理。
摘要由CSDN通过智能技术生成
 

一.带头结点的单链表

先说一下create()建立的链表,采用cycle的方式。

/*************************************************************

带头结点的单链表13-1-1ex3.cpp

1.建立单链表

2.求链表长度

3.在第i个位置插入元素(种方法)

4.删除指定序号的节点

由于本程序是带头节点的,所以在删除函数Del()和插入函数InsertList()

中,head均没有被改变,所以,主函数中,用了Del和InsertList之后

均没有改变head,在PrintList中,还可以继续把head传入。如果是这样

的话,这两个函数完全可以定义成void类型,而不是Node *类型的

只要将Create()定义成Node *就行,再在main()中定义一个指针head

将head=Create();以后这个head都不会变了。好像带头节点链表的这些

常规操作均不改变Head节点。

**************************************************************/

#include<stdio.h>

#include<stdlib.h>

//#include<string.h>

//#include<conio.h>

 

typedef struct student

{

         int data;

         struct student *next;

         //struct student *pre;

}Node;

 

 

int GetLength(Node *head)

{

         int n=0;

         Node *p;

         p=head->next;

         while(p!=NULL)

         {

                  p=p->next;

                  n++;

         }

         return n;

}

 

Node *InsertList(Node *head, int x, int i) //插入元素方法1

{

         Node *p, *q, *s;

         int j=1;

         p=head;

         if(i<1 || i>GetLength(head)+1)

         {

                  exit(1);

         }

         s=(Node *)malloc(sizeof(Node));

         s->data=x;

         while(j<=i)

         {

                  q=p;

  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值