今天问到一个面试题
单链表的逆置问题
但是我回答的不是很满意
我的思路是:设置两个指针,主要是为了代替单链表的前驱不太容易的问题,但是代码也没有写出来,所以我需要学习一下单链表的逆置问题。
代码如下
#include <iostream>
#include <iomanip>
using namespace std;
struct node
{
int item;
node *next;
node(int x, node* t)
{
item = x;
next = t;
}
};
typedef node *link;
link reverse(link x)
{
link t, y=x, r=0;
while(y!=0)
{
t = y->next;
y->next = r;
r = y;
y = t;
}
return r;
}
int main()
{
int n,m;
n=9;
m=5;
link t = new node(1, 0);
t->next = t;
link x = t;
for(int i=2; i<=n; i++)
x = (x->next = new node(i, t));
x->next = 0;
t = reverse(t);
while(t != 0)
{
cout << setw(5) << t->item;
t = t->next;
}
return 0;
}
算法的实现思路其实就是利用循环找到原来单链表的最后一个,将这个元素连接到新表的头结点,将倒数第二个指向空,然后依次循环,直到全部表存入即可。