码迷,mamicode.com
首页 > 编程语言 > 详细

反转单链表(C++)

时间:2016-09-24 19:02:03      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

普通的单链表反转算法

大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转。

 1 ListNode* reverseList(ListNode* head) {
 2     ListNode *pre = NULL,*tmp,*cur = head;
 3     while(cur != NULL){
 4         tmp = cur->next;
 5         cur->next = pre;
 6         pre = cur;
 7         cur = tmp;
 8     }
 9     return pre;
10 } 

 

整个过程很简单,就是cur指向当前节点,pre之前cur的前一个节点,然后不断向前推进直到结束。
最后返回的pre即为新链表的头指针。

一个有意思的反转算法

最近解题的时候发现了一个特别好玩反转算法,简单的来说就是把整个指针地址交换掉的算法。 最后还是返回原链表的头指针就OK。

 1 ListNode* reverseList(ListNode *head) {
 2 ListNode **prev = &head;
 3 prev = &(*prev)->next;
 4 ListNode **pivot = &(*prev)->next;
 5 while(prev) {
 6     swap(*prev, (*pivot)->next);
 7     swap(*prev, *pivot);
 8 }
 9 return head;
10 }

 

有的时候想一想代码的世界真的没有终结,只有你想不到,没有做不到的事。

反转单链表(C++)

标签:

原文地址:http://www.cnblogs.com/dinghing154/p/5903676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!