输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表进行就地逆置(不增加新结点),并输出逆置后的单链表数据。
时间: 2023-04-25 21:03:05 浏览: 148
可以按照以下步骤建立并就地逆置一个带头结点的单链表:
1. 首先定义一个带头结点的单链表,并初始化头结点的指针为空。
2. 依次读入输入的整数,如果输入的数为-1,则停止读入;否则,创建一个新结点,将当前输入的数存入新结点的数据域中,将新结点插入到链表的尾部。
3. 从链表的第二个结点开始,依次将每个结点插入到头结点之后,直到将整个链表逆置完成。
4. 遍历逆置后的链表,依次输出每个结点的数据域。
以下是示例代码实现:
```python
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
def reverse_linked_list(head):
# 从第二个结点开始遍历,将每个结点插入到头结点之后
prev = head.next
curr = prev.next
while curr:
next_node = curr.next
curr.next = head.next
head.next = curr
curr = next_node
# 将原链表的尾结点指向空,防止成环
prev.next = None
def print_linked_list(head):
curr = head.next
while curr:
print(curr.data, end=' ')
curr = curr.next
# 建立带头结点的单链表
head = Node()
tail = head
num = int(input("请输入整数:"))
while num != -1:
new_node = Node(num)
tail.next = new_node
tail = new_node
num = int(input("请输入整数:"))
# 就地逆置单链表
reverse_linked_list(head)
# 输出逆置后的单链表数据
print_linked_list(head)
```
你可以使用类似以下的输入测试代码来测试上述程序的输出:
```python
# 输入:1 2 3 4 5 -1
# 输出:5 4 3 2 1
nums = list(map(int, input().split()))
head = Node()
tail = head
for num in nums:
if num == -1:
break
new_node = Node(num)
tail.next = new_node
tail = new_node
reverse_linked_list(head)
print_linked_list(head) # 输出 5 4 3 2 1
```