1.单链表的插入
    头插中间插尾插 2.单链表的删除链表长度计算链表查找数值带头节点的单链表
    头插尾插  
  
 
 
1.单链表的插入
 
头插
 
 
中间插
 
 
尾插
 
 
2.单链表的删除
 
bool Remove(LinkList
& first, int i, dataType
& x)
{
    
    
    
    LinkNode 
*p, 
*q;
    int k;
    
if (i 
== 0)
        
return false;    
    
if (i 
== 1)
    {
        q 
= first;
        first 
= first
->link;
    }
    
else
    {                 
        p 
= first;  int k 
= 1;    
        
while (p 
!= NULL && k 
< i 
- 1)
        {
            p 
= p
->link; k
++;
        }
        
if (p 
== NULL || p
->link == NULL)
        {
            printf(“无效的删除位置
!\n”);
            
return false;       
        }
        
else
        {                               
            q 
= p
->link;            
            p
->link = q
->link;
        }
        x 
= q
->data;  
        free(q);    
        
return true;
    }
} 
链表长度计算
 
int Length(LinkList first)
{
    LinkNode *p = first->link;
    
    
int count = 
0;
    
while (p != NULL)
    {            
        p = p->link;   
count++;
    }
    
return count;
} 
链表查找数值
 
 
LinkNode 
*Search ( LinkList first, DataType x ) 
{
      LinkNode 
* p 
= first
->link;        
      
while ( p 
!= NULL && p
->data != x )  
             p 
= p
->link;
      
return p;     
}
 
while ( p != NULL && p->data != x )   这个条件不能写成while(p->data != x && p != NULL)  因为前面为假 && 就不再判断后面了,见《c陷阱和缺陷》
 
带头节点的单链表
 
头结点位于表的最前端,本身不带数据,仅标志表头。
 
目的:  1.统一空表与非空表的操作  2.简化链表操作的实现。
 
头插
 
void insertFront(LinkList
& first, DataType endTag)
{
    DataType val;   LinkNode 
*s;
    scanf(“
%d”, 
&val);          
    
while (val 
!= endTag)           
    {   
        s 
= (LinkNode 
*)malloc(sizeof(LinkNode));
        s
->data = val;              
        s
->link = first
->link;      
        first
->link = s;
        scanf(“
%d”, 
&val);      
    }
} 
 
尾插
 
void insertRear(LinkList
& first, DataType endTag) 
{
    DataType val;
    LinkNode 
*s, 
*rear 
= first; 
    scanf(“
%d”, 
&val);      
    
while (val 
!= endTag) 
    {
        s 
= (LinkNode 
*)malloc(sizeof(LinkNode));
        s
->data = val;          
        rear
->link = s;   rear 
= s; 
        scanf(“
%d”, 
&val);      
    }
    rear
->link = NULL;      
}