206. 反转链表(easy)

反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

  • show the code:
# 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
        """
        reversehead = None
        p = head
        p_pre = None
        while p:
            p_next = p.next
            if not p_next:
                reversehead = p
            p.next = p_pre
            p_pre = p
            p = p_next
        return reversehead
  • 此题属于经典题,之前做过很多次了,拿到之后还是无从下手。。。剑指offer上讲的很详细,关键是考虑清楚三个节点的情况,其中现有遍历的节点指针指向其之前的节点,这里特别注意,为了防止链表断开,我们需要事先保存好现在节点的下一个节点,所以总的来说会有四个变量:reversehead反转后的头节点,p现有遍历到的节点,p_pre现有节点的上一个节点,p_next现有节点的下一个节点
  • 理清这个情况之后就简单了,接下来需要判断循环终止条件。考虑到反转后的链表头节点是反转前链表的尾节点,所以当p_next是None时说明链表遍历结束,反转结束。
时间复杂度:O(n),空间复杂度O(1)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容