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.代码方面基本都能看懂,不过自己写的时候容易卡壳。
分析:新建p、q两个节点,p指向链表L,遍历链表,让q=p,然后p指向下一个节点,
q的后继等于L的后继,再将q赋值给L的后继。
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
1.第1行中* &一起用的功能是什么?
2.对while循环内的内容不是很懂。
分析:查阅书本资料后大致懂得了该算法的功能和构成。首先p指向头结点,
构造只有头结点的双链表L,遍历链表,修改p结点的next域,用q临时保存
其后继结点,再采用头插法将p结点插入链表中。 最后让p重新指向新结点。
原文:https://www.cnblogs.com/jmu-net-18-020/p/10596454.html