一、单链表
# include <stdio.h>
# include <stdlib.h>
typedef struct Node {
int data;
Node * next;
} Node;
Node* initList ( )
{
Node * list = ( Node* ) malloc ( sizeof ( Node) ) ;
list-> data = 0 ;
list-> next = NULL ;
return list;
}
void headInsert ( Node* L, int data)
{
Node * node = ( Node* ) malloc ( sizeof ( Node) ) ;
node-> data = data;
node-> next = L-> next;
L-> next = node;
L-> data++ ;
}
void tailInsert ( Node* L, int data)
{
Node * List = L;
Node * node = ( Node* ) malloc ( sizeof ( Node) ) ;
node-> data = data;
while ( List-> next)
{
List = List-> next;
}
node-> next = List-> next;
List-> next = node;
L-> data++ ;
}
int delete_node ( Node* L, int data)
{
Node * pre = L;
Node * current = L-> next;
while ( current)
{
if ( current-> data== data)
{
pre-> next = current-> next;
free ( current) ;
L-> data-- ;
return true;
}
else
{
pre = current;
current = current-> next;
}
}
return false;
}
void printList ( Node* L)
{
while ( L-> next)
{
L = L-> next;
printf ( "node = %d\n" , L-> data) ;
}
}
int main ( )
{
Node* L = initList ( ) ;
headInsert ( L, 1 ) ;
headInsert ( L, 2 ) ;
headInsert ( L, 3 ) ;
headInsert ( L, 4 ) ;
headInsert ( L, 5 ) ;
tailInsert ( L, 6 ) ;
tailInsert ( L, 7 ) ;
printList ( L) ;
if ( delete_node ( L, 3 ) ) {
printf ( "success delete\n" ) ;
}
else {
printf ( "fail delete\n" ) ;
}
printList ( L) ;
system ( "pause" ) ;
return 0 ;
}
二、单循环链表
# include <stdio.h>
# include <stdlib.h>
typedef struct Node {
int data;
Node * next;
} Node;
Node* initList ( )
{
Node * L = ( Node* ) malloc ( sizeof ( Node) ) ;
L-> next = NULL ;
L-> data = 0 ;
L-> next = L;
return L;
}
void headInsert ( Node* L, int data)
{
Node * node = ( Node* ) malloc ( sizeof ( Node) ) ;
node-> data = data;
node-> next = L-> next;
L-> next = node;
L-> data++ ;
}
void tailInsert ( Node* L, int data)
{
Node * List = L;
Node * node = ( Node* ) malloc ( sizeof ( Node) ) ;
while ( List-> next!= L)
{
List = List-> next;
}
node-> data = data;
node-> next = L;
List-> next = node;
L-> data++ ;
}
int delete_node ( Node* L, int data)
{
Node * pre = L;
Node * current = L-> next;
while ( current!= L)
{
if ( current-> data == data)
{
pre-> next= current-> next;
free ( current) ;
L-> data-- ;
return true;
}
else
{
pre = current;
current = current-> next;
}
}
return false;
}
void printList ( Node* L)
{
Node * node = L-> next;
while ( node != L)
{
printf ( "%d->" , node-> data) ;
node= node-> next;
}
printf ( "NULL\n" ) ;
}
int main ( )
{
Node* L = initList ( ) ;
headInsert ( L, 1 ) ;
headInsert ( L, 2 ) ;
headInsert ( L, 3 ) ;
headInsert ( L, 4 ) ;
headInsert ( L, 5 ) ;
tailInsert ( L, 6 ) ;
tailInsert ( L, 7 ) ;
printList ( L) ;
delete_node ( L, 4 ) ;
delete_node ( L, 7 ) ;
printList ( L) ;
system ( "pause" ) ;
return 0 ;
}