题目描述:
输入一个链表,从尾到头打印每个节点的值
答案:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def printListFromTailToHead(self, listNode):
# write code here
l = []
head = listNode
while head!=None:
l.insert(0,head.val)
head = head.next
return l
扩展:
# 链表类
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
# 创建链表
def createnode():
listNode = ListNode(1)
tmp = listNode
for i in range(2,9):
tmp.next = ListNode(i)
tmp = tmp.next
return listNode
#打印链表
def printnode(head):
p = head
while p!=None:
print(p.val)
p = p.next
listNode = createnode()
printnode(listNode) #根据指定的值移除结点
def remove(listNode,value): #删除头结点直接从第二个结点返回 if listNode.value == value: return listNode.next else: p = listNode while p.next.value != value: p = p.next p.next = p.next.next return listNode
#根据指针删除结点(满足条件结点在链表中,时间复杂度为O(1))
class ListNode:
def __init__(self,value):
self.value = value
self.next = None
# 创建链表
for i in range(10):
listNode = ListNode(1)
tmp = listNode
for i in range(2, 9):
tmp.next = ListNode(i)
tmp = tmp.next
# 删除指针对应结点
def delete(head,delete):
# 要删除的结点不是尾结点
if delete.next != None:
pNext = delete.next
delete.value = pNext.value
delete.next = pNext.next
# 只有一个结点
elif head == delete:
head.value = 0
head.next = None
# 链表中有多个结点,删除尾结点
else:
pNode = head
while pNode.next != delete:
pNode = pNode.next
pNode.next = None
return head
遍历一遍查找链表中间元素
class linklist(): def __init__(self,x): self.next = None self.value = x def search(link): p1 = link p2 = link while p1 != None: if p1.next: p1 = p1.next.next p2 = p2.next else: return p2.value,p2.next.value return p2.value link = linklist(1) p = link for i in range(2,10): p.next = linklist(i) p = p.next print(search(link))