一、【链表的创建】:
【1】、空链表:
Node *createList()
{
Node *head = (Node*)malloc(sizeof(Node));
head->next = NULL;
return head;
}
【2】、头插法;
#include <stdio.h>
typedef struct node
{
int data;
struct node *next; //next 是指针变量,指向结构体变量
}Node;
Node *createList()
{
Node *head = (Node *)malloc(sizeof(Node));//申请了堆空间
head->next = NULL;
Node *cur = NULL;
int tmp;
while (1)
{
scanf("%d", &tmp);
if (tmp == 1)
{
break;
}
cur = (Node *)malloc(sizeof(Node));
cur->data = tmp;
cur->next = head->next;
head->next = cur;
}
return head;
}
【3】、尾插法:
Node * createListByEnd(void)
{
//头节点
Node * head=(Node *)malloc(sizeof(Node));
if(NULL == head)
{
printf("mallo failer\n");
return NULL;
}
head->next=NULL;
Node * pre=head;
printf("please input data : ");
//输入数据
int data;
scanf("%d",&data);
while(data)
{
Node * cur=(Node *)malloc(sizeof(Node));
if(NULL == cur)
{
break;
}
cur->data=data;
//连接到链表的尾部
cur->next=pre->next;
pre->next=cur;
//更新前面节点
pre=cur;
//再次输入数据
scanf("%d",&data);
}
return head;
}
二、【链表的遍历和查找】:
链表的结构相对而言比较特殊,在对链表中的结点进行访问和查找的时候,必须从链表的头结点开始,按照链表结点指针域所指的顺序逐个查找结点,直到找到为止。和对数组元素的访问一样,利用循环结构对链表结点 进行遍历是一种常用的方法,中使用的就是while循环结构,循环的终止条件便是判断next指针是否为NULL(即是否已经到达了最终结点)。
【1】链表的遍历:
void traverseList(Node * head)
{
head = head->next;
while(head!=NULL)
{
printf("%d\n",head->data);
head = head->next;
}
}
【2】链表的查找:
Node *findNodeList(Node * head, int nfind)
{
while (head->next)
{
if (head->data == nfind)
return head;
head = head->next;
}
return head;
}
三、【链表的插入与求长度】:
/*
插入节点 暂时只是头插入法
*/
void insertLinkNode(Node * head,int insertData)
{
Node * curNode = (Node *)malloc(sizeof(Node));
if(NULL == curNode)
{
printf("malloc is error\n");
return NULL;
}
curNode->data=insertData;
//先保证新节点指向父节点的下一个节点
//然父节点指向新节点
//这样做的目的可以保证链表不被破坏
curNode->next=head->next;
head->next=curNode;
}
/*
获取链表长度
*/
int lengthLink(Node * head)
{
int len=0;
//首元节点
head=head->next;
while(head)
{
head=head->next;
len++;
}
return len;
}
四、【链表的删除】:
//删除链表
void deleteList(Node *head ,Node *find)
{
while (head->next != find) head = head->next;
head->next = find->next;
free(find);
find = NULL;
return ;
}
还有一些关于链表的深入,笔者将在以后继续讲。谢谢哈。