惭愧 去年入职面试时候 被问过这道题,现在工作满一年了,才整理写出来
头结点插入法
新建一个头结点,遍历链表,把每个结点 用头结点插入到新链表中。最后新建的链表就是反转后的链表。
伪代码:
next = head.next
head.next = pre
pre = head
head = next
1、next 保存下一次要插入的结点,即结点2
2、 pre插入链表中,将 pre 变量赋值给 head.next,即 此时节点1 指向了 None
3、 纠正pre的指向,即 pre 指向节点1,将节点1 设为“上一个节点”
4、head指向下一次要插入的结点
python代码
class Node(object):
def __init__(self , elem , next_ = None):
self.elem = elem
self.next = next_
def reverseList(head):
if head == None or head.next ==None :
return head
pre = None
next = None
while(head != None):
next = head.next
head.next = pre
pre = head
head = next
return pre
if __name__ == "__main__":
l1= Node(1)
l1.next = Node(2)
l1.next.next = Node(3)
l1.next.next.next = Node(4)
l = reverseList(l1)
print(l.elem , l.next.elem , l.next.next.elem , l.next.next.next.elem)