单链表的创建、添加、插入、删除
尾部插入元素
void appendElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
//Step 1.创建一个新结点
q=(NodePtr)malloc(sizeof(LNode));
q->data=paraChar;
q->next=NULL;
//Step 2.找到尾部
p=paraHeader;
while(p->next!=NULL){
p=p->next;
}
//Step3.插入
p->next=q;
}
指定位置插入
void insertElement(NodePtr paraHeader,char paraChar,int paraPosition){
NodePtr p,q;
//Step1.找到位置
p=paraHeader;
for(int i=0;i
p=p->next;
if(p==NULL){
printf("The position %d is beyond the scope of the list.",paraPosition);
return;
}
}
//Step2.创建新结点
q=(NodePtr)malloc(sizeof(LNode));
q->data=paraChar;
//插入
printf("linkingrn");
q->next=p->next;
p->next=q;
}
删除结点
void deleteElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
p=paraHeader;
while((p->next!=NULL)&&(p->next->data!=paraChar)){
p=p->next;
}
if(p->next==NULL){
printf("Cannot delete %crn",paraChar);
return;
}
q=p->next;
p->next=p->next->next;
free(q);
}
完整代码
#include
#include
typedef struct LinkNode{
char data;
struct LinkNode *next;
}LNode,*LinkList,*NodePtr;
//初始化链表
LinkList initLinkList(){
NodePtr tempHeader=(NodePtr)malloc(sizeof(LNode));
tempHeader->data=' ';
tempHeader->next=NULL;
return tempHeader;
}
//打印链表
void printList(NodePtr paraHeader){
NodePtr p=paraHeader->next;
while(p!=NULL){
printf("%c",p->data);
p=p->next;
}
printf("rn");
}
//尾部插入元素
void appendElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
//Step 1.创建一个新结点
q=(NodePtr)malloc(sizeof(LNode));
q->data=paraChar;
q->next=NULL;
//Step 2.找到尾部
p=paraHeader;
while(p->next!=NULL){
p=p->next;
}
//Step3.插入
p->next=q;
}
//插入元素到给定的位置
void insertElement(NodePtr paraHeader,char paraChar,int paraPosition){
NodePtr p,q;
//Step1.找到位置
p=paraHeader;
for(int i=0;i
p=p->next;
if(p==NULL){
printf("The position %d is beyond the scope of the list.",paraPosition);
return;
}
}
//Step2.创建新结点
q=(NodePtr)malloc(sizeof(LNode));
q->data=paraChar;
//插入
printf("linkingrn");
q->next=p->next;
p->next=q;
}
//从链表中删除结点
void deleteElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
p=paraHeader;
while((p->next!=NULL)&&(p->next->data!=paraChar)){
p=p->next;
}
if(p->next==NULL){
printf("Cannot delete %crn",paraChar);
return;
}
q=p->next;
p->next=p->next->next;
free(q);
}
//测试
void appendInsertDeleteTest(){
//Step1.初始化一个空表
LinkList tempList=initLinkList();
printList(tempList);
//Step2.插入一些字符
appendElement(tempList, 'H');
appendElement(tempList, 'e');
appendElement(tempList, 'l');
appendElement(tempList, 'l');
appendElement(tempList, 'o');
appendElement(tempList, '!');
printList(tempList);
//Step3.删除一些字符
deleteElement(tempList, 'e');
deleteElement(tempList, 'a');
deleteElement(tempList, 'o');
printList(tempList);
//Step.4插入字符至给定的位置
insertElement(tempList, 'o', 1);
printList(tempList);
}
//地址测试
void basicAddressTest(){
LNode tempNode1,tempNode2;
tempNode1.data=4;
tempNode1.next=NULL;
tempNode1.data=6;
tempNode1.next=NULL;
printf("The first node: %d, %d, %drn",&tempNode1, &tempNode1.data, &tempNode1.next);
printf("The second node: %d, %d, %drn",&tempNode2, &tempNode2.data, &tempNode2.next);
tempNode1.next=&tempNode2;
}
int main()
{
appendInsertDeleteTest();
basicAddressTest();
}
运行结果
Hello!
Cannot delete a
Hll!
linking
Holl!
The first node: 6487520, 6487520, 6487528
The second node: 6487504, 6487504, 6487512
--------------------------------
Process exited after 0.02025 seconds with return value 0
请按任意键继续. . .