逆转链表:写一算法逆置带头结点的单链表L,要求逆置后的单链表利用L中的原结点,不可以重新申请结点空间。
链表结点的生命如下:
template <class Entry> struct Node{ Entry data; Node<Entry> *next; };
请实现下面的函数:
Void reverse(Node<Entry> *L)
Void reverse(Node<Entry> *L) { // 原地逆置单向链表 if (L == NULL) { // 头节点为空, 直接返回 return; } Node<Entry> *p = L->next; // 工作指针 if (p == NULL) { // 只有头节点, 直接返回 return; } Node<Entry> *q = p->next; if (q == NULL) { // 只有一个元素, 直接返回 return; } p->next = NULL; // 第一项元素为逆置后的最后一个元素,其next的值为NULL Node<Entry> *temp; while (q) { temp = q->next; // 临时保存q的下一个节点 q->next = p; // 翻转指针,由后一个元素指向前一个元素 p = q; // 向后移动一个元素 q = temp; // 向后移动一个元素 } L->next = p; // 将头节点指向最后的节点 }