输入一串数字,构造链表并反转该链表,遍历并输出反转后的链表。本题不使用c++链表不得分。 输入 共1行,依次表示链表存储的整型数字。保证至少有一个数字。 输出 依此反转后的链表每个节点的值。
时间: 2024-06-20 18:00:42 浏览: 112
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
在编程中,给定一串数字并构造链表并反转它,通常会涉及以下几个步骤:
1. **接收输入**:首先,你需要读取用户输入的一串数字,这通常是通过`sys.stdin.readline()`(Python)或类似方法来完成的。
2. **创建链表结构**:定义一个链表节点类,包含一个数据元素(这里可以假设是整数)和一个指向下一个节点的引用。链表的头节点通常是空的。
3. **构造链表**:遍历输入数字,为每个数字创建一个新的节点,并将其添加到链表中。将新节点的next指向前一个节点,然后将前一个节点设置为新节点,这样就形成了一个链表。
4. **反转链表**:对链表进行反转操作,通常使用迭代或递归的方式。一个常见的技巧是使用三个指针:prev、current和next。初始化prev为None,current为头节点,然后依次移动它们,每次都把current的next指针更新为prev,直到current变为None。
5. **遍历并输出**:最后,从反转后的链表头节点开始,逐个输出节点的值。每次输出current的数据元素,然后将current移动到下一个节点。
6. **代码示例(Python)**:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def build_and_reverse(numbers):
head = None
for num in map(int, numbers.split()):
if not head:
head = ListNode(val=num)
else:
current = head
while current.next:
current = current.next
current.next = ListNode(val=num)
prev = None
current = head
while current:
temp = current.next
current.next = prev
prev = current
current = temp
return prev
def print_linked_list(head):
current = head
while current:
print(current.val, end=' ')
current = current.next
print()
# 假设输入数字是1 2 3 4
numbers = input()
reversed_head = build_and_reverse(numbers)
print_linked_list(reversed_head)
```
阅读全文