链表每两个成为一组,互相交换相邻组输出
时间: 2023-05-29 17:06:33 浏览: 92
如果链表的节点数是奇数,最后一个节点不会被交换。
算法思路:
1. 创建一个虚拟头节点dummy,将其next指向链表的头节点head。
2. 创建指针p指向虚拟头节点。
3. 如果p的下一个节点和下下个节点不为空,则进行交换。
4. 将p指向下一个节点的下一个节点,继续进行下一轮交换。
5. 返回虚拟头节点dummy的next。
Python代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def swap_pairs(head: ListNode) -> ListNode:
dummy = ListNode(-1)
dummy.next = head
p = dummy
while p.next and p.next.next:
node1 = p.next
node2 = p.next.next
p.next = node2
node1.next = node2.next
node2.next = node1
p = node1
return dummy.next
```
示例:
```python
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
result = swap_pairs(head)
while result:
print(result.val)
result = result.next
# 输出:
# 2
# 1
# 4
# 3
```