定义一个结点类
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
定义单链表
单链表是在结点类的基础上,由一个一个结点构成。
链表知道头结点就能获取所有的节点。
r指向头结点,p逐个指向后续节点。
initList得到每个结点的地址,printlist得到节点的值。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class LinkList:
def __init__(self):
self.head=None
def initList(self, data):
# 创建头结点
self.head = ListNode(data[0])
r=self.head
p = self.head
# 逐个为 data 内的数据创建结点, 建立链表
for i in data[1:]:
node = ListNode(i)
p.next = node
p = p.next
return r
def printlist(self,head):
if head == None: return
node = head
while node != None:
print(node.val,end=' ')
node = node.next
if __name__ == '__main__':
l=LinkList()
data1 = [1, 2, 3]
l1=l.initList(data1)
l.printlist(l1)
《剑指offer》 反转链表
题目:输入一个链表,反转链表后,输出新链表的表头。
class LinkList:
def __init__(self):
self.head=None
def initList(self, data):
# 创建头结点
self.head = ListNode(data[0])
r=self.head
p = self.head
# 逐个为 data 内的数据创建结点, 建立链表
for i in data[1:]:
node = ListNode(i)
p.next = node
p = p.next
return r
def printlist(self,head):
if head == None: return
node = head
while node != None:
print(node.val,end=' ')
node = node.next
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
head = ListNode(-1)
print(head)
while pHead is not None:
tmp = head.next
print('--',tmp)
head.next = pHead
pHead = pHead.next
head.next.next = tmp
return head.next
def printlist(self,head):
if head == None: return
node = head
while node != None:
print(node.val,end=' ')
node = node.next
if __name__ == '__main__':
l=LinkList()
data1 = [1, 2, 3]
l1=l.initList(data1)
l.printlist(l1)
s = Solution()
res = s.ReverseList(l1)
s.printlist(res)