反转单链表

反转链表就是只通过改变指针的指向不开辟新的内存空间来把链表反转。

目录

一、初始化:

二、开始反转

三、代码实现


一、初始化:

cur为第一个结点时,反转后它将会成为最后一个结点,所以它的next要指向None。cur指向第一个结点,pre指向为None。

二、开始反转

  1. 利用临时变量temp保存后面的链表,因为没有cur.next的指针引用会导致断链,防止断链用tamp保存没处理元素链表的头结点。
  2. 让cur的next指针指向pre。
  3. pre指向cur指向的结点
  4. cur指向temp指向的位置




三、代码实现

class Node:
    def __init__(self, value=None, next=None):
        self.value, self.next = value, next

class Linklist:
    def __init__(self, maxsize=None, value=None):
        self.maxsize = maxsize
        self.root = Node(value) # 指头结点
        self.length = 0
        self.tail = None

        def reverse_l(self):
            per = None # 指向当前结点的前驱结点
            cur = self.root # 指向当前结点
            while cur is not None:
                if cur.next is None: # 最后一个元素
                    self.root.next = cur # 把头结点的next指向最后一个结点
                temp = cur.next # temp用于保存当前元素后一个元素的指针,防止断链
                cur.next = per 
                per = cur
                cur = temp

传头指针的版本,只要改动一丢丢

    def ReverseList(self, pHead):
        # write code here
        cur = pHead
        pre = None
        while cur is not None:
            if cur.next is None:
                cur.next = pre
                return cur
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pHead

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值