1.将单链表储存为数组,然后按照数组的索引逆序进行反转。
2.利用循环迭代的思想依次将各节点反转。
prev(Null) A(head)-->B(next)-->C-->D-->Null
开始时,prev为Null,head指向头结点A,next指针指向A节点的下一个节点B。首先从A节点开始逆序,将A节点的next指针指向prev,因为prev的当前值是NULL,所以A节点就从链表中脱离出来了,然后移动head和next指针,使它们分别指向B节点和B的下一个节点C(因为当前的next已经指向B节点了,因此修改A节点的next指针不会导致链表丢失)。逆向节点A之后,链表的状态如图
Null<--A(prev) B(head)-->C(next)-->D--Null
一共经历了四个操作:
head->next=prev
prev = head
head = next
next=head->next
循环的初始条件为:prev = Null
循环的终止条件为:head = Null
用python实现:
class LinkReverse:
def ReverseList(self,head):
if not head or head.next==None:
return head
last = None
while head:
tmp = head.next
head .next= last
last = head
head = tmp
return last #返回表头