设计一个算法,交换l中第m个结点与第n个结点的 值
时间: 2024-03-07 11:49:39 浏览: 28
假设链表的每个节点结构体定义如下:
```c
struct ListNode {
int val;
struct ListNode *next;
};
```
则交换链表中第m个结点和第n个结点的值的算法如下:
1. 定义两个指针p和q,分别指向待交换的两个结点的前一个结点,初始时p和q都指向头结点。
2. 遍历链表,将p和q分别移动到第m-1个结点和第n-1个结点的位置。
3. 定义两个指针a和b,分别指向第m个结点和第n个结点,交换它们的val值。
4. 返回链表的头结点。
算法的C代码实现如下:
```c
struct ListNode* swapNodes(struct ListNode* head, int m, int n){
if (head == NULL || m == n) {
return head;
}
struct ListNode *p = head, *q = head;
for (int i = 1; i < m-1 && p != NULL; i++) {
p = p->next;
}
for (int i = 1; i < n-1 && q != NULL; i++) {
q = q->next;
}
if (p == NULL || q == NULL) {
return head;
}
struct ListNode *a = p->next, *b = q->next;
int temp = a->val;
a->val = b->val;
b->val = temp;
return head;
}
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)