题目链接
https://leetcode.com/problems/reverse-linked-list/
题目原文
Reverse a singly linked list.
题目翻译
翻转单向链表
思路方法
这个题目比较基础,解法非常多,能AC的解法也很多,这里只整理部分思路以供参考。
思路一
利用栈结构,将链表内容依次压入栈,再从栈依次弹出即可构造逆序。下面的代码用普通数组模拟栈。
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
""" :type head: ListNode :rtype: ListNode """
p = head
newList = []
while p:
newList.insert(0, p.val)
p = p.next
p = head
for v in newList:
p.val = v
p = p.next
return head
思路二
与思路一栈的思想类似,不过是直接在原链表操作,通过迭代将节点重组,前面的节点转移到重组链表的后面。实际上就是头结点倒插操作。
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
""" :type head: ListNode :rtype: ListNode """
new_head = None
while head:
p = head
head = head.next
p.next = new_head
new_head = p
return new_head
思路三
递归,注意终止条件
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
""" :type head: ListNode :rtype: ListNode """
if not head or not head.next:
return head
p = head.next
n = self.reverseList(p)
head.next = None
p.next = head
return n
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51306170