逆置单链表mooc课后练习

逆置单链表。(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