您的位置:首页 > 其它

单链表反转

2016-04-12 21:03 246 查看
问题很简单,只要你静下心来想,很容易实现,中间逻辑不弄错就行

所以这里我们就不画图来解释了

首先,我们用
current
nextNode
third
分别表示
当前节点
当前节点的下一个节点
相对于当前节点的下下一个节点


也就是说

nextNode = current->next;
third = nextNode->next;


接下来我们继续:

存储当前节点(第一个)的next,当前节点(第一个)指向第三个(第二个的next),第二个指向(表头的next)变为链表首,表头指向第二个(之前存储的当前节点(第一个)的next)

假设我们的链表是这样的:

begin->1->2->3->4->5->end


一次变化后:

begin->2->1->3->4->5->end


二次变化后:

begin->3->2->1->4->5->end


三次变化后:

begin->4->3->2->1->5->end


四次变化后:

begin->5->4->3->2->1->end


ok!完成了

也就是每次把当前节点的后面一个提到最前面去

伪代码
如下:

current = L->next;

while(current) {
tmp = current->next;
current->next = nextNode->next;
nextNode->next = L->next;
L->next = tmp;
}


循环一遍就行了

除此之外,暴力一点的方式就直接整一个新的链表,倒序重新存一遍就行了。。

总之,要么时间换空间,要么空间换时间,具体情况具体分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: