问题描述:

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

首先是迭代方式:

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or head.next == None:
return head
p1=None
p2=head
while p2:
t=p2.next
p2.next = p1
p1 = p2
p2 = t
return p1

过程:

关键之处,先要找到p2的下一个节点,然后再断开p2.next并指向p1

然后p1,p2同时右移,保证p1每次都在p2的前面

这样每次就可以让p2.next=p1

结果:

递归版本的:

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or head.next == None:
return head
p1=head.next
p2=self.reverseList(p1)
head.next=None
p1.next=head
return p2

过程:

首先是:

然后是以p1为头结点的链表:

依次类推直到头结点不为空或头结点的下一节点不为空,也就是:

此时此时返回的值就是p2,也就是最后一个节点。之后就翻转当前的链表:

依次递推即可:

需要明确的是:先会一直执行:

p2=self.reverseList(p1)

得到返回值之后才会执行:

head.next=None

p1.next=head

最后返回p2即可。

结果:

最新文章

  1. php计算中英文混搭字符串长度
  2. 出现Assertion failure in -[***** layoutSublayersOfLayer:]
  3. Alternative Representations for 4-Bit Integers
  4. Android 系统开发学习杂记(转)
  5. kickstart安装
  6. hdoj(3790) 最短路径
  7. 使用iScroll和photoswipe写手机浏览图片的插件的几点经验
  8. java參数传递机制浅析
  9. 打印 PHP $_SERVER 常量
  10. tar split cat 创建、合并分卷压缩包
  11. vue2.0 如何在hash模式下实现微信分享
  12. KAPTCHA验证码使用步骤
  13. [leetcode]272. Closest Binary Search Tree Value II二叉搜索树中最近的值2
  14. height:100%
  15. Random库 --Python3
  16. 读书笔记之Linux系统编程与深入理解Linux内核
  17. Intellij IDEA神器值得收藏的小技巧
  18. MySql PartionBy
  19. volatile关键字与内存可见性
  20. 起步X5 UI模型使用的新的JAVASCRIPT UI库 DHTMLX (简称DHX)

热门文章

  1. BFT-SMaRt:用Netty做客户端的可靠信道
  2. Nginx作为web静态资源服务器——跨域访问
  3. ORM基础4 跨表查询+原子性操作
  4. 跨源请求cors和jsonp
  5. IDEA新建maven项目没有webapp目录解决方法
  6. Promise.finally
  7. java8 stream自定义分组求和并排序
  8. 解决android sdk无法更新 更新慢的问题
  9. (ES6)JavaScript中面向对象类的实现
  10. linux--->redis php扩展安装