1.在Θ(n)时间内将链表转置,而且只能需要少量的额外空间
这里需要用3个指针使得q指向p然后依次后移。
代码:
#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}LinkList;
LinkList* Create_End();
void printLinkList(LinkList *L);
LinkList* Create_End()
{
LinkList *head, *e, *p;
head=new LinkList;
int key;
e = head;
printf("请输入您要插入的数据,#结束!\n");
while (scanf("%d",&key)==1)
{
p = new LinkList;
p->data = key;
e->next = p;
e = p;
}
e->next = NULL;
return head;
}
void printLinkList(LinkList *L)
{
LinkList *p = L->next;
while (p->next != NULL)
{
printf("%d->", p->data);
p = p->next;
}
printf("%d", p->data);
printf("\n");
}
LinkList* reverse(LinkList *L)
{
LinkList* p,*q,*r;
p=L->next;
q=p->next;
r=q->next;
p->next=NULL;
while(r->next!=NULL)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
q->next=p;
r->next=q;
L->next=r;
return L;
}
int main(void)
{
LinkList *Linklist1=new LinkList;
Linklist1=Create_End();
printLinkList(Linklist1);
printf("转换后的链表为:");
Linklist1=reverse(Linklist1);
printLinkList(Linklist1);
}