LeetCode----Reverse Linked List
来源:互联网 发布:绕过网络白名单限制 编辑:程序博客网 时间:2024/05/20 12:47
Reverse Linked List
Reverse a singly linked list.
代码:
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ h = head p = h q = h.next isFirst = True if not head or not head.next: # 当head为空链表或者链表只有一个值 return head if not q: # 当链表只有两个值时,反转头和尾指针 q.next = h h.next = None return q while q: r = q.next if isFirst: isFirst = False p.next = None q.next = p p = q q = r return p
---------------------------------------------------------------------------------------------------------------------------
2016-05-01补充:
代码1:
class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if not head or not head.next: return head pre = head mid = head.next post = mid.next pre.next = None while post: mid.next = pre pre = mid mid = post post = post.next mid.next = pre return mid
代码2:# 代码2的简洁性和易理解性优于代码1
class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if head is None: return head pre = None mid = head post = None while mid: post = mid.next mid.next = pre pre = mid mid = post return pre
递归代码:
class Solution2(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if head is None or head.next is None: return head newhead = self.reverseList(head.next) # 得到表尾结点为新的链表头,直接返回该节点 # 递归回退过程中进行当前节点的反向 tail = head.next tail.next = head head.next = None return newhead
Discuss中看到的好的代码:
Method 1: uses self as a dummy node for swapping
def reverseList(self, head): pre, pre.next, tail = self, head, head while tail and tail.next: pre.next, pre.next.next, tail.next = \ tail.next, pre.next, tail.next.next return self.next
Method 2: swapping using two variable, pre and cur
def reverseList(self, head): pre, cur = None, head while cur: cur.next, pre, cur = pre, cur, cur.next return pre
Method 3: Recursive method by storing previous node in the function argument.
def reverseList(self, head, pre = None): if not head: return pre cur, head.next = head.next, pre return self.reverseList(cur, head)
0 0
- [LeetCode]Reverse Linked List
- [Leetcode] Reverse Linked List
- leetcode Reverse Linked List
- [LeetCode] Reverse Linked List
- [LeetCode]Reverse Linked List
- Leetcode---Reverse Linked List
- [leetcode] Reverse Linked List
- [leetcode]Reverse Linked List
- Leetcode Reverse Linked List
- [leetcode] Reverse Linked List
- leetcode Reverse Linked List
- Reverse Linked List[LeetCode]
- leetcode--Reverse Linked List
- LeetCode Reverse Linked List
- leetcode: Reverse Linked List
- [leetcode] Reverse Linked List
- LeetCode - Reverse Linked List
- LeetCode || Reverse Linked List
- AndroidStudio中如何使用Github
- select sysdate - interval '2' day from dual --计算N天前的日期
- 多字段相同值约束
- Makefile初级详解
- ICA 分类语音分离
- LeetCode----Reverse Linked List
- 编写Applet(大小140*60),其背景色为蓝色,画一个长方形(其填充色为pink色,各边离Applet的边为10像素)和一个在填充的长方形中左右移动的小球(半径15)。
- CentOS 6.6 源码安装MySQL
- Quorum NWR
- SQL语句优化(二)
- joda-time遇到的坑
- Nutch爬虫爬取视频研究文档
- React-Native-Android集成问题总汇
- Other Linker Flags参数-ObjC、-all_load和-force_load讲解