测试输入: 请输入链表节点,以“#”结束: 1234567# 初始链表为: 1234567 请输入要交换的n位置(n<单链表长度),如1,2,3...... 3 测试输出: 3和4位置交换后链表为: 1243567 编写一段代码
时间: 2024-09-23 17:15:15 浏览: 46
这是一个关于链表操作的问题,我们需要编写一个函数来实现链表中特定位置节点的交换。首先,我们需要定义一个链表节点类,然后创建一个方法来处理这个交换操作。
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def swap_nodes(head, n1, n2):
# 如果链表为空或只有一个元素,直接返回
if not head or n1 == 1 and n2 == 1:
return head
dummy = ListNode(0) # 创建虚拟头节点
dummy.next = head
prev = dummy
cur = head
# 找到n1和n2位置对应的节点
for _ in range(n1 - 1):
prev = cur
cur = cur.next
node1 = cur
cur = dummy.next
for _ in range(n2 - 1):
prev = cur
cur = cur.next
node2 = cur
# 保存两个节点的下一个节点
next_to_node1 = node1.next
next_to_node2 = node2.next
# 将node2的next指向node1,node1的next指向node2
node1.next = node2
node2.next = next_to_node1
# 将临时存储的next指针恢复
node1.next.next = next_to_node2
return dummy.next
# 示例
input_list = [1, 2, 3, 4, 5, 6, 7]
head = ListNode(*input_list)
n1, n2 = 3, 4 # 要交换的位置
new_head = swap_nodes(head, n1, n2)
# 输出交换后的链表
current = new_head
output_str = []
while current is not None:
output_str.append(str(current.val))
current = current.next
output_str.append('#')
print("".join(output_str))
# 结果将是:
# 1243567#
```
阅读全文
相关推荐



















