python实现单链表反转_单链表反转python实现-Go语言中文社区

单链表的反转可以使用循环,也可以使用递归的方式

1.循环反转单链表

循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可。

a0eedc294b5c1fe968aeff005d81b11a.gif

代码:

class ListNode:

def __init__(self,x):

self.val=x;

self.next=None;

def nonrecurse(head): #循环的方法反转链表

if head is None or head.next is None:

return head;

pre=None;

cur=head;

h=head;

while cur:

h=cur;

tmp=cur.next;

cur.next=pre;

pre=cur;

cur=tmp;

return h;

head=ListNode(1); #测试代码

p1=ListNode(2); #建立链表1->2->3->4->None;

p2=ListNode(3);

p3=ListNode(4);

head.next=p1;

p1.next=p2;

p2.next=p3;

p=nonrecurse(head); #输出链表 4->3->2->1->None

while p:

print p.val;

p=p.next;

2.递归实现单链表反转

class ListNode:

def __init__(self,x):

self.val=x;

self.next=None;

def recurse(head,newhead): #递归,head为原链表的头结点,newhead为反转后链表的头结点

if head is None:

return ;

if head.next is None:

newhead=head;

else :

newhead=recurse(head.next,newhead);

head.next.next=head;

head.next=None;

return newhead;

head=ListNode(1); #测试代码

p1=ListNode(2); # 建立链表1->2->3->4->None

p2=ListNode(3);

p3=ListNode(4);

head.next=p1;

p1.next=p2;

p2.next=p3;

newhead=None;

p=recurse(head,newhead); #输出链表4->3->2->1->None

while p:

print p.val;

p=p.next;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值