首页 > 代码库 > 反转单链表(C++)
反转单链表(C++)
普通的单链表反转算法
大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改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++)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。