一.带头结点的单链表
先说一下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;