线性表总结
1. 代码段1:单链表逆置
1.1 代码1
LNode *Inverse(LNode *L)              //1
{                                                       //2
LNode *p, *q;                                   //3
    p = L->next;                             //4
    L->next = NULL;                      //5
    while (p != NULL)                    //6
    {                                               //7
     q = p;                               //8
     p = p->next;                     //9
     q->next = L->next;           //10
     L->next = q;                     //11
    }                                               //12
    return L;                                   //13
}                                                       //14
1.2 不懂得地方
1.*和&的用法、功能和区别不太懂。
2.代码方面基本都能看懂,不过自己写的时候容易卡壳。
分析:新建p、q两个节点,p指向链表L,遍历链表,让q=p,然后p指向下一个节点,
q的后继等于L的后继,再将q赋值给L的后继。
2. 代码段2:双链表结点的逆置算法
2.1 代码2
void reverse(DLinkNode * &L)         //1
{                                                       //2
    DLinkNode *p = L->next, *q;       //3
    L->next = NULL;                         //4
    while(p != NULL){                       //5
        q = p->next;                            //6
        p->next = L->next;                  //7
        if(L->next != NULL)                //8
            L->next->prior = p;             //9
            L->next = p;                            //10
        p->prior  = L;                          //11
        p = q;                                     //12            
    }                                                 //13
}                                                     //14        
2.2 不懂得地方
1.第1行中* &一起用的功能是什么?
2.对while循环内的内容不是很懂。
分析:查阅书本资料后大致懂得了该算法的功能和构成。首先p指向头结点,
构造只有头结点的双链表L,遍历链表,修改p结点的next域,用q临时保存
其后继结点,再采用头插法将p结点插入链表中。 最后让p重新指向新结点。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号