请编写算法完成单链表顺数第k个结点与倒数第k个结点的值交换
时间: 2024-05-02 15:22:15 浏览: 82
1. 定义两个指针p1和p2,p1指向第k个结点,p2指向链表头结点。
2. 从头结点开始遍历链表,p1和p2同时往后移动,直到p1指向第k个结点。
3. 再从头结点开始遍历链表,p1和p2同时往后移动,直到p1指向最后一个结点。此时p2指向倒数第k个结点。
4. 交换p1和p2结点的值。
5. 返回交换后的链表。
算法实现如下:
```
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def swapKthNode(head: ListNode, k: int) -> ListNode:
if not head or not head.next:
return head
p1, p2 = head, head
for _ in range(k-1):
p1 = p1.next
if not p1:
return head
while p1.next:
p1 = p1.next
p2 = p2.next
p1.val, p2.val = p2.val, p1.val
return head
```
时间复杂度:O(n),其中n为链表长度。需要遍历链表两次。
空间复杂度:O(1)。只需要常数级别的额外空间。
阅读全文