class Node(object): # object 里面有很多高级的方法,一般选择继承
#定义节点传入值为elem,指向下一个为空
def __init__(self, elem):
self.elem = elem
self.next = None
# 开始定义单链表
class SingleLinkList(object):
# 默认值为None, node = Node(5), SingleNode = SingleLinkList(node)
# 第一个节点可以先设置为5啊
def __init__(self, node = None):
self.__head = node # 头指针指向第一个节点
def is_empty(self):
'''链表是否为空'''
return self.__head == None
# 链表头部添加(不用判断是否为空了,因为在头部添加的,不用遍历了)
def add(self, item):
node = Node(item)
node.next = self.__head
self.__head = node
# 链表尾部添加(需要判断是否为空,为空的话就不需要遍历了。直接self.__head = node)
def append(self, item):
node = Node(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head # 设定指针从头结点开始
while cur.next != None: # 开始遍历到结尾
cur = cur.next
cur.next = node
# 定义一个链表反转的函数
def reverse(self, node):
reverseHead = None # 反转后的头指针
cur = self.__head # 设定指针从头结点开始
pre = None # 前一个节点
pnext = None # 后一个节点
while cur.next != None:
pnext = cur.next # 先把cur.next存下来。
if (pnext == None) # 反转完了,遍历结束
reverseHead = cur # 最后一个节点,设定为头指针
cur.next = pre # 当前节点,指向前一个节点
pre = cur
cur = pnext
return reverseHead
链表面试题(一):反转链表的算法实现 - csbdong - 博客园