题目: 给出时间为n的非递归过程,反转单链表。
思路:利用两个指针,不断前移不断反转,利用一个tmp来临时保留数据,便可以实现,具体见代码。
#include <iostream>
using namespace std;
struct LinkList
{
int key;
struct LinkList *next;
};
struct LinkList * insertLinkList(LinkList*head,int d);
void printLinkList(LinkList *head);
struct LinkList * reverseLinkList(LinkList*head);
int main ()
{
struct LinkList * head = NULL;
for (int i = 0;i < 5;i ++)
{
head = insertLinkList(head,i+2);
}
printLinkList(head);
head = reverseLinkList(head);
printLinkList(head);
for (int i = 10;i < 15;i ++)
{
head = insertLinkList(head,i+2);
}
printLinkList(head);
head = reverseLinkList(head);
printLinkList(head);
}
struct LinkList *insertLinkList(LinkList*head,int d)
{
struct LinkList * tmp = new struct LinkList();
tmp->key = d;
tmp->next = NULL;
if (NULL == head)
{
head = tmp;
return head;
}
struct LinkList * p = head;
while (p->next != NULL) p= p->next;
p->next = tmp;
return head;
}
void printLinkList(LinkList *head)
{
struct LinkList*p = head;
while (p!= NULL)
{
cout << p->key << ' ';
p = p->next;
}
cout << endl;
}
struct LinkList * reverseLinkList(LinkList*head)
{
if (NULL == head || NULL == head->next) return head;
struct LinkList * p= head;
struct LinkList *q = p->next;
struct LinkList * tmp = NULL;
while (q != NULL)
{
tmp = q->next;
q->next = p;
if (p->next == q)
{
p->next = NULL;
}
p = q;
q = tmp;
}
head = p;
return head;
};