帮我用c语言写一个将第i个结点和其后继结点交换指针的代码
时间: 2023-03-24 09:03:43 浏览: 86
好的,以下是代码:
```c
void swapNode(Node* head, int i) {
Node* p = head;
for (int j = 1; j < i && p != NULL; j++) {
p = p->next;
}
if (p == NULL || p->next == NULL) {
return;
}
Node* q = p->next;
p->next = q->next;
q->next = p;
if (i == 1) {
head = q;
} else {
Node* pre = head;
for (int j = 1; j < i - 1; j++) {
pre = pre->next;
}
pre->next = q;
}
}
```
希望能对您有所帮助!
相关问题
帮我用c语言写一个将单链表中第i个结点和其后继结点交换位置,要求只修改指针的代码
好的,以下是代码:
```c
void swapNode(ListNode* head, int i) {
if (head == NULL || head->next == NULL) {
return;
}
ListNode* p = head;
int j = 1;
while (p->next != NULL && j < i) {
p = p->next;
j++;
}
if (j != i) {
return;
}
ListNode* q = p->next;
if (q == NULL) {
return;
}
p->next = q->next;
q->next = p;
head = q;
}
```
希望能够帮到你!
线性表)编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。用c语言写完整代码
下面是交换单链表中指针P所指结点与其后继结点的C语言代码实现:
```c
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
void swapNode(ListNode* head, ListNode* p) {
if (p == NULL || p->next == NULL) {
return; // P所指结点为尾结点,无法交换
}
ListNode* pre = head;
ListNode* cur = head->next;
while (cur != NULL) {
if (cur == p) {
break; // 找到P所指结点
}
pre = cur;
cur = cur->next;
}
ListNode* next = p->next;
p->next = next->next;
next->next = p;
pre->next = next;
next->next = p;
}
```
注意,该代码需要先定义一个名为ListNode的结构体,包含int类型的val和指向下一结点的指针next。另外,需要注意链表头结点head不包含实际数据,只是为了方便操作而存在的。
阅读全文
相关推荐
















