赞
踩
函数的处理步骤如下:
初始化三个指针 p、q 和 r。p 用于追踪新链表的最后一个节点,最初设置为 NULL。q 指向当前正在处理的原链表的节点,最初是链表的头节点。r 用于临时保存 q->next,即下一个要处理的节点。
在 while 循环中,遍历原链表。循环的每一次迭代都会处理一个节点,将其从原位置移动到新链表的前端。这通过改变节点的 next 指针实现,使其指向新链表的当前第一个节点 p。
在移动节点之后,p 更新为 q,q 更新为 r,以继续遍历和反转剩余的链表。
当 q 为 NULL 时,意味着已经处理完所有的节点,此时 p 指向新链表的头节点。最后,将链表的头指针 L 更新为 p,完成链表的反转。
typedef struct LNode { Elemtype data; struct LNode *next; }LNode,*LinkList; void reverse(LinkList &L) { LNode *p = NULL; // p作为新链表的头指针,初始化为NULL LNode *q = L; // q为旧链表的遍历指针,初始化为L的头节点 LNode *r = NULL; // r作为临时指针,用来保存q的下一节点 // 遍历旧链表,直到q为NULL while(q != NULL) { r = q->next; // 保存q的下一节点,因为改变链表结构后就无法通过q来访问了 q->next = p; // 反转指针,将q的next指向新链表的第一个节点p p = q; // p向后移动,现在p是新链表的第一个节点 q = r; // q向后移动,q变成下一个待处理的节点 } L = p; // 最后将原链表的头指针指向新链表的头节点p,完成反转 }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。