逆置单链表。(30分)
题目内容:一个单链表L=(a1 , a2 , … , an-1 , an),其逆单链表定义为L’=( an , an-1 , … , a2 , a1),编写算法将单链表L逆置,要求逆单链表仍占用原单链表的空间。
输入格式:一行内输入原单链表中的数据(若干个正整数,之间用空格隔开,并以-1结束)
输出格式:一行内输出建立的原单链表数据结果,之间用两个分隔符 -- 隔开,结束标志-1不输出。
下一行内输出逆置后的单链表数据结果,之间用两个分隔符 -- 隔开。
输入样例:2 4 6 8 10 -1
输出样例:--2--4--6--8--10
--10--8--6--4--2
首先,我们需要定义一个单链表的数据结构,包含一个数据域和一个指向下一个节点的指针域。
接下来,我们可以按照输入的顺序建立原单链表,并将每个节点的指针指向前一个节点,实现逆置。
最后,我们可以遍历逆置后的单链表,输出其中的数据。
下面是具体的实现代码:
# 定义单链表节点的数据结构
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
# 建立原单链表并逆置
def reverseLinkedList(nums):
# 建立头节点
head = ListNode()
cur = head
# 建立原单链表
for num in nums:
if num == -1:
break
node = ListNode(num)
cur.next = node
cur = cur.next
# 逆置单链表
prev = None
cur = head.next
while cur:
next_node = cur.next
cur.next = prev
prev = cur
cur = next_node
head.next = prev
return head
# 输出单链表的数据
def printLinkedList(head):
cur = head.next
while cur:
print("--" + str(cur.val), end="")
cur = cur.next
print()
# 输入原单链表的数据
nums = list(map(int, input().split()))
# 建立并逆置单链表
head = reverseLinkedList(nums)
# 输出原单链表的数据
printLinkedList(head)
# 输出逆置后的单链表的数据
printLinkedList(head)
输入样例:
2 4 6 8 10 -1
输出样例:
--2--4--6--8--10
--10--8--6--4--2