P37.5
有一个整型链表,将其原地逆置,即使用的辅助空间复杂度为O(1)。
(1)算法的基本设计思想
之前用了递归,效果不错,因此准备该函数也使用递归。基本思想是一层递归函数有一个对应的节点指针,那么通过将该节点指针的next的next指向自身,便可以实现下一个节点指向本节点的操作。
注意以下几点:
实现功能需要一层有一个自己的对应的指针变量,因此在实现的时候,注意传参的表达。不能另外建立一个变量,例如p,然后令
p=p->next,将p作为参数传入函数。这样会导致p不断变化,破坏了一一对应的原则。应直接将p->next传入,这样的效果便是
第一层递归 变量p
第二层递归 变量p->next
第三层递归 变量p->next->next
第四层递归 变量p->next->next->next
这样便实现了一一对应
另外,链表要有头结点,最后一个节点要指向NULL,这些都需要注意。
(2)代码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
}LNode, *LinkList;
void printList(LinkList &L)
{
printf("\n");
LNode *s &