单链表

建表、删除

typedef struct LNode
{
    int data;
    struct LNode *next;
}*Slink;

LNode *p,*q;//指向链表节点的p,q指针 
Slink H;//指向链表,头指针 

void InitList(Slink &L)
{
    L = new LNode;
    if(!L) cout<<"空间分配失败";
    L->next = NULL;
}

void DestroyList(Slink &L)
{
    while(L)
    {
        p = L;
        L = L->next;
        delete p;
    }
L
= NULL;//头结点占有的空间被释放,但指针L的值不变,为安全起见,置L为空 }

搜索

void GetElem(Slink &L,int pos,int &e) 
{
    int i = 0;
    p = L;
    while(p && i<pos)
    {
        i++;
        p = p->next;
    }
    if(p == NULL)cout << "false";
    else e = p->data;
    
    p = NULL;
}

插入

void InsertElem(Slink &L,int pos,int &e) 
{
    int i = 0;
    p = L;
    while(p && i < pos-1)
    {
        i++;
        p = p->next;
    }
    
    if(i != pos-1)cout<<"false";
    else 
    {
        q = new LNode;
        q->data = e;
        
        q->next = p->next;
        p->next = q;
    }
    
    p = NULL;
    q = NULL;
}

删除

bool ListDelete(SLink &L,int pos,int &e)
{
    p = L;j = 0;
while(p->next && j < pos-1) p = p->next;
if((!p->next) || j > pos-1)return FALSE; q = p->next; p->next = q->next; e = q->next; delete(q);//释放节点空间

return TRUE; }

 交换前后两段

void exchange_L(SLink &L,int m)
{
    if(m && L->next)
    {
        p = L->next;
        k = 1;
        while(k < m && p)
            p = p->next,++k;
        if(p && p->next)
        {
            ha = L->next;
            L->next = p->next;
            p->next = NULL;
            q = L->next;
            while(q->next)q = q->next;
            q->next = ha;
        }
    }
}
原文地址:https://www.cnblogs.com/Cindy-Chan/p/11179597.html