PTA 6-1 单链表逆转
本题是一个非常经典的题目:单链表逆转。
这是链表结点的定义:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
先给出实现的代码:
List Reverse( List L )
{
List before = NULL, head = L, next;
while(head != NULL)
{
next = head->Next; // 记录当前值的下一个值
head->Next = before; // 修改当前结点的下一个为上个结点
before = head; // 上一个结点修改为本结点
head = next; // 当前结点为下一个结点
}
return before;
};
代码的思想很简单,就是我们需要将每个结点的指针改变过来。
当我们从前往后将当前结点的指针指向前一个的时候,我们不可避免的就需要至少三个指针:
- 之前结点的指针
- 当前结点的指针
- 下一个结点的指针
注意在这个过程中,我们如果修改了当前结点指向的下一个结点的位置,那么我们必然就找不到之前这个结点的下一个结点。
所以我们需要保存下一个结点,以免修改当前结点指向的下一个指针之后找不到下一个结点的位置了。