交换链表中两个节点的源代码例子
时间: 2024-05-15 16:17:10 浏览: 20
好的,以下是交换链表中两个节点的源代码例子:
```
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapNodes(ListNode* head, int k) {
ListNode *p1 = nullptr, *p2 = nullptr;
for (auto p = head; p; p = p->next, --k) {
p2 = p2 ? p2->next : nullptr;
if (!k) {
p1 = p;
p2 = head;
}
}
swap(p1->val, p2->val);
return head;
}
};
```
请问还有其他问题吗?
相关问题
CShap 链表交换指针交换链表的节点 源代码
下面是C#语言中交换两个链表节点的代码示例:
```
public class ListNode
{
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
}
public class Solution
{
public ListNode SwapNodes(ListNode head, int k)
{
if (head == null) return null;
int len = 0;
ListNode cur = head;
while (cur != null)
{
len++;
cur = cur.next;
}
ListNode node1 = null, node2 = null;
cur = head;
int count = 1;
while (cur != null)
{
if (count == k) node1 = cur;
if (count == len - k + 1) node2 = cur;
count++;
cur = cur.next;
}
int temp = node1.val;
node1.val = node2.val;
node2.val = temp;
return head;
}
}
```
上述代码中,我们定义了一个`ListNode`类,表示链表节点。其中,`val`字段表示该节点的值,`next`字段表示该节点的后继节点。
接着,我们定义了一个`Solution`类,其中包含一个`SwapNodes`方法,用于交换链表中第`k`个节点和倒数第`k`个节点。该方法接收两个参数:`head`表示链表的头节点,`k`表示要交换的节点位置。
在`SwapNodes`方法内部,我们首先计算出链表的长度`len`。接着,我们分别用`node1`和`node2`表示待交换的两个节点。具体来说,我们遍历链表,当遍历到第`k`个节点时,将其赋值给`node1`;当遍历到倒数第`k`个节点时,将其赋值给`node2`。
最后,我们交换`node1`和`node2`的值,并返回链表的头节点`head`。
请给一个交换链表节点的链表排序例子
好的,这是一个例子:假设有一个链表,其中的节点包含一个数字值。现在,我们需要对这个链表进行排序,使得节点的数字值按照从小到大的顺序排列。我们可以使用交换节点的方法来实现排序,具体步骤如下:
1. 从链表的头部开始,依次遍历每一个节点。
2. 对于每一个节点,再从它的下一个节点开始遍历,查找比它的数字值更小的节点。
3. 如果找到了比当前节点数字值更小的节点,则交换这两个节点的位置。
4. 继续遍历链表,直到所有的节点都被遍历过为止。
5. 最后,链表中的节点就按照数字值从小到大的顺序排列了。
笑话时间:为什么数学老师永远没有生气的时候?因为他们会保持一个非常平稳的函数曲线!