标签:
刚刚出炉的复习代码,太久没写,复习下,带头结点的单向链表。
很多人和书都用的指向指针的指针,反正我是不喜欢,所以就没用。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"time.h"
//链表
typedef struct LNode{
int value ;
LNode *next;
}LNode,*LinkList;
//创建链表
LinkList CreatLinkList(){
LinkList p = (LinkList)malloc( sizeof( LNode));
if(p==NULL){
return NULL;
}
p->next=NULL;//创建一个带头结点的单向链表
return p;
}
//向末尾添加数据
LinkList AddToLinkListTail (LinkList p ,int value){
LinkList tmp=p;
while(tmp->next!=NULL){
tmp = tmp->next;
}
LinkList newp = (LinkList)malloc( sizeof( LNode));
if(newp==NULL){
printf("内存分配失败");
return p;
}
newp->value=value;
tmp->next=newp;
newp->next=NULL;
return p;
}
//打印链表
void PrintLinkList(LinkList p){
LinkList tmp = p;
if(tmp->next==NULL){
printf("链表为空\n");
}else{
while(tmp=tmp->next){
printf("%d\t",tmp->value );
}
printf("\n");
}
}
//插入数据
LinkList InsertLinkList(LinkList p , int node,int value){
//在节点node之前插入数据value
LinkList tmp = p;
if(node<1){//节点值错误
return NULL;
}
while(tmp!=NULL && node-1>0 ){
//寻找第node-1个节点
node--;
tmp=tmp->next;
}
if(tmp==NULL) {//节点大于链表长度
return NULL;
}
LinkList newp = (LinkList)malloc(sizeof(LNode));
newp->value=value;
newp->next = tmp->next;
tmp->next= newp;
return tmp;
}
int main(){
LinkList p;
//创建
p=CreatLinkList();
//打印
PrintLinkList(p);
//添加到末尾
p = AddToLinkListTail(p,1);
//打印
PrintLinkList(p);
//插入
InsertLinkList(p,1,8);
//打印
PrintLinkList(p);
//插入
InsertLinkList(p,3,10);
//打印
PrintLinkList(p);
system("pause");
}
标签:
原文地址:http://blog.csdn.net/u013785951/article/details/45670807