普通的单链表反转算法

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

 ListNode* reverseList(ListNode* head) {
ListNode *pre = NULL,*tmp,*cur = head;
while(cur != NULL){
tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
return pre;
}

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

一个有意思的反转算法

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

 ListNode* reverseList(ListNode *head) {
ListNode **prev = &head;
prev = &(*prev)->next;
ListNode **pivot = &(*prev)->next;
while(prev) {
swap(*prev, (*pivot)->next);
swap(*prev, *pivot);
}
return head;
}

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

特殊的反转单链表算法(C++)的更多相关文章

  1. Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现

    Reverse反转算法 #include <iostream> using namespace std; //交换的函数 void replaced(int &a,int & ...

  2. 在O(n) 时间复杂度,O(1)空间复杂度内反转单链表

    在LeetCode中看到判断回文的程序:https://leetcode.com/problems/palindrome-linked-list/ 里面用单链表来存储数据,先反转前半部分的单链表,然后 ...

  3. 以K个为一组反转单链表,最后不足K个节点的部分也反转

    package StackMin.ReverseList_offer16; public class ReverseKgroup_extend_offer16 { /** * 分组反转单链表,最后不足 ...

  4. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

  5. Java反转单链表(code)

    主要是面试中可能会经常碰上该类似操作,尤其是稍大点公司,面试官可能并不在乎你能不能搞定该题,但是这类型题目最是能体现程序员的思维状态 ---一个迷糊头脑的程序员 怎能立志改变这个世界 /** * @a ...

  6. Leetcode25--->Reverse Nodes in k-Group(以k个节点为段,反转单链表)

    题目: 给定一个单链表,一次反转k个节点,最终返回翻转后的链表的头节点:如果链表不足k个,则不变 举例: Given this linked list: 1->2->3->4-> ...

  7. C++反转单链表

    单链表 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; ...

  8. Java反转单链表

    class Node { private int data; private Node nextNode; public Node(int data) { this.data = data; } pu ...

  9. 以k个元素为一组反转单链表

    Example: input: 1->2->3->4->5->6->7->8->NULL and k = 3 output:3->2->1- ...

随机推荐

  1. hdu 1043 pku poj 1077 Eight (BFS + 康拓展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 http://poj.org/problem?id=1077 Eight Time Limit: 1000 ...

  2. 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解

    提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以 ...

  3. bool([x]) 将x转换为Boolean类型

    >>> a = 1 >>> b = 0 >>> c = "None" >>> d = bool(a) > ...

  4. BZOJ 3944 Sum 解题报告

    我们考虑令: \[F_n = \sum_{d|n}\varphi(d)\] 那么,有: \[\sum_{i=1}^{n}F_i = \sum_{i=1}^{n}\sum_{d|i}\varphi(d) ...

  5. CV牛人牛事简介之一

    CV牛人牛事简介之一 [论坛按] 发帖人转载自:http://doctorimage.cn/2013/01/01/cv-intro-niubility/#6481970-qzone-1-83120-8 ...

  6. PHP设置COOKIE的HttpOnly属性

    httponly是微软对cookie做的扩展.这个主要是解决用户的cookie可能被盗用的问题. 大家都知道,当我们去邮箱或者论坛登陆后,服务器会写一些cookie到我们的浏览器,当下次再访问其他页面 ...

  7. C语言中随机数的生成

    刚好在找这方面的资料,看到了一片不错的,就全文转过来了,省的我以后再找找不到. 在C语言中,可以通过rand函数得到一个“伪随机数”.这个数是一个整数,其值大于等于0且小于等于RAND_MAX.ran ...

  8. c++学习之旅-Cygwin+Eclipse ide for c++

    一,cygwin下载完毕后配置系统环境片两path指向cygwin/bin 二,eclipse设置 2.1 设置工作目录的cygwin映射 cygwin/d ->d:\ 2.2设置编译 下面新建 ...

  9. UVA 10608 Friends

    题目大意:共有n个人,m对人为已知的朋友关系,而且这种关系具有传递性,也就是A与B,B与C是朋友,可以确定A与C是朋友,求一个人数最多的朋友团体. bfs就可以了,遇到未访问的结点,加入队列并且朋人数 ...

  10. ASP.NET UpdatePanel实现点击按钮无刷新且执行js脚本

    [一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/3770779.html]  *.aspx: <asp:ScriptManager ID=& ...