首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么使单向链表倒序

2012-03-03 
如何使单向链表倒序别在网上复制粘贴啊~!那天去面试碰到这题,那个老师的意思是1,2,3,4,5,6,7,8,9,10一、把1

如何使单向链表倒序
别在网上   复制   粘贴啊
~!

    那天去面试碰到这题,那个老师的意思是

    1,2,3,4,5,6,7,8,9,10

一、把10放到10,1,2,3,4,5,6,7,8,9
这样

二、2,3,4,5,6,7,8,9,10,1

不会做啊     大家帮帮忙


[解决办法]
没看懂lz说甚么

单链表倒序可以这样,将p遍历到最后一个节点,然后将t指向p前面一个节点,然后翻转
之后两个指针都向前移1位,只到第一个节点

最后把头接点连到翻转后的第一个节点,也就是以前的最后一个节点
[解决办法]
使用两个指针...一个指针比另外一个移动的慢一步
[解决办法]
这个都不会做还去面试
够胆量
[解决办法]
用数组比较简单,如果一定要用链表,LZ需要写
1.struct A
{
int a;
A * next;
};

A* head;//此为原链表的头指针,已经建好了
A* temp = head;
while(temp-> next-> next != NULL)//找到倒数第二个节点
{
temp = temp-> next;
}
temp-> next-> next = head;
head = temp-> next;
temp-> next = NULL;
[解决办法]
2.
A* head;//此为原链表的头指针,已经建好了
A* temp = head;
while(temp-> next != NULL)//找到倒数第二个节点
{
temp = temp-> next;
}
temp-> next = head;//先使链表变为环形链表
temp = head;
head = head-> next;
temp-> next = NULL;
[解决办法]
楼主这两个问题并不是单向链表倒序的问题啊

单向链表倒序是这样: 1 2 3 4 5 -> 5 4 3 2 1

楼主的问题应该是循环的问题,用数组很容易实现,非要用链表吗?

[解决办法]
写了一个用数组循环转的

void left(int *p,int len,int n)
{
int temp;
while(n> 0)
{
temp=p[0];
for(int i=0;i <=len-2;i++)
{
p[i]=p[i+1];
}
p[len-1]=temp;
n--;
}
}
void right(int *p,int len,int n)
{
int temp;
while(n> 0)
{
temp=p[len-1];
for(int i=len-2;i> =0;i--)
{
p[i+1]=p[i];
}
p[0]=temp;
n--;
}
}
void main()
{
const int N=5;
int a[N]={1,2,3,4,5};

left(a,5,2); //向左转两个
for(int i=0;i <N;i++)
{
cout < <a[i] < < " ";
}
cout < <endl;

right(a,5,2); //向右转两个,相当于恢复原数组
for(int j=0;j <N;j++)
{
cout < <a[j] < < " ";
}
cout < <endl;
}
[解决办法]
分析了一下这道面试题,说明白一点就是如何实现将第一个数移动到最后一个数的后面或者将最后一个数移动到第一个数的前面
[解决办法]
上面说得对,如果将第一个数移到后面去,将第一个节点移到后面去就行了.
[解决办法]
然后将第二个节点当表头.当然为了获得相应节点指针,你还是要遍历一下的.

热点排行