输入一串数字,构造链表并反转该链表,遍历并输出反转后的链表。本题不使用c++链表不得分。 输入 共1行,依次表示链表存储的整型数字。保证至少有一个数字。 输出 依此反转后的链表每个节点的值。
时间: 2024-06-20 22:00:42 浏览: 107
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)
```
阅读全文