单链表的创建、添加、插入、删除
尾部插入元素
void appendElement ( NodePtr paraHeader, char paraChar) {
NodePtr p, q;
q= ( NodePtr) malloc ( sizeof ( LNode) ) ;
q-> data= paraChar;
q-> next= NULL ;
p= paraHeader;
while ( p-> next!= NULL ) {
p= p-> next;
}
p-> next= q;
}
指定位置插入
void insertElement ( NodePtr paraHeader, char paraChar, int paraPosition) {
NodePtr p, q;
p= paraHeader;
for ( int i= 0 ; i< paraPosition; i++ ) {
p= p-> next;
if ( p== NULL ) {
printf ( "The position %d is beyond the scope of the list." , paraPosition) ;
return ;
}
}
q= ( NodePtr) malloc ( sizeof ( LNode) ) ;
q-> data= paraChar;
printf ( "linking\r\n" ) ;
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 %c\r\n" , paraChar) ;
return ;
}
q= p-> next;
p-> next= p-> next-> next;
free ( q) ;
}
完整代码
# include <stdio.h>
# include <malloc.h>
typedef struct LinkNode {
char data;
struct LinkNode * next;
} LNode, * LinkList, * NodePtr;
LinkList initLinkList ( ) {
NodePtr tempHeader= ( NodePtr) malloc ( sizeof ( LNode) ) ;
tempHeader-> data= '\0' ;
tempHeader-> next= NULL ;
return tempHeader;
}
void printList ( NodePtr paraHeader) {
NodePtr p= paraHeader-> next;
while ( p!= NULL ) {
printf ( "%c" , p-> data) ;
p= p-> next;
}
printf ( "\r\n" ) ;
}
void appendElement ( NodePtr paraHeader, char paraChar) {
NodePtr p, q;
q= ( NodePtr) malloc ( sizeof ( LNode) ) ;
q-> data= paraChar;
q-> next= NULL ;
p= paraHeader;
while ( p-> next!= NULL ) {
p= p-> next;
}
p-> next= q;
}
void insertElement ( NodePtr paraHeader, char paraChar, int paraPosition) {
NodePtr p, q;
p= paraHeader;
for ( int i= 0 ; i< paraPosition; i++ ) {
p= p-> next;
if ( p== NULL ) {
printf ( "The position %d is beyond the scope of the list." , paraPosition) ;
return ;
}
}
q= ( NodePtr) malloc ( sizeof ( LNode) ) ;
q-> data= paraChar;
printf ( "linking\r\n" ) ;
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 %c\r\n" , paraChar) ;
return ;
}
q= p-> next;
p-> next= p-> next-> next;
free ( q) ;
}
void appendInsertDeleteTest ( ) {
LinkList tempList= initLinkList ( ) ;
printList ( tempList) ;
appendElement ( tempList, 'H' ) ;
appendElement ( tempList, 'e' ) ;
appendElement ( tempList, 'l' ) ;
appendElement ( tempList, 'l' ) ;
appendElement ( tempList, 'o' ) ;
appendElement ( tempList, '!' ) ;
printList ( tempList) ;
deleteElement ( tempList, 'e' ) ;
deleteElement ( tempList, 'a' ) ;
deleteElement ( tempList, 'o' ) ;
printList ( tempList) ;
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, %d\r\n" , & tempNode1, & tempNode1. data, & tempNode1. next) ;
printf ( "The second node: %d, %d, %d\r\n" , & 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
请按任意键继续. . .