206. Reverse Linked List [easy] (Python)

题目链接

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

    原文作者:coder_orz
    原文地址: https://blog.csdn.net/coder_orz/article/details/51306170
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞