帮我用c语言写一个第i个结点与后继结点交换的代码
时间: 2023-03-25 12:01:16 浏览: 58
好的,以下是代码:
```c
struct Node {
int val;
struct Node* next;
};
void swapNode(struct Node* head, int i) {
struct Node* curr = head;
for (int j = 1; j < i && curr != NULL; j++) {
curr = curr->next;
}
if (curr == NULL || curr->next == NULL) {
return;
}
struct Node* temp = curr->next;
curr->next = temp->next;
temp->next = curr;
curr = temp;
}
```
希望能帮到你!
相关问题
帮我用c语言写一个第i个结点与后继结点指针交换的代码
好的,以下是代码:
```c
struct Node {
int val;
struct Node* next;
};
void swapNode(struct Node* head, int i) {
struct Node* cur = head;
for (int j = 1; j < i && cur != NULL; j++) {
cur = cur->next;
}
if (cur == NULL || cur->next == NULL) {
return;
}
struct Node* temp = cur->next;
cur->next = temp->next;
temp->next = cur;
}
```
这段代码可以交换链表中第i个结点和它的后继结点的指针。
用C语言实现一个删除两个双向链表中相同结点的函数
以下是用C语言实现删除两个双向链表中相同结点的函数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
void deleteNode(Node* node) {
if (node == NULL) {
return;
}
if (node->prev != NULL) {
node->prev->next = node->next;
}
if (node->next != NULL) {
node->next->prev = node->prev;
}
free(node);
}
void deleteCommonNodes(Node* list1, Node* list2) {
Node* p = list1;
while (p != NULL) {
Node* q = list2;
while (q != NULL) {
if (p->data == q->data) {
deleteNode(p);
deleteNode(q);
break;
}
q = q->next;
}
p = p->next;
}
}
int main() {
Node* list1 = createNode(1);
list1->next = createNode(2);
list1->next->prev = list1;
list1->next->next = createNode(3);
list1->next->next->prev = list1->next;
Node* list2 = createNode(2);
list2->next = createNode(3);
list2->next->prev = list2;
deleteCommonNodes(list1, list2);
Node* p = list1;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
Node* q = list2;
while (q != NULL) {
printf("%d ", q->data);
q = q->next;
}
printf("\n");
return 0;
}
```
在此示例代码中,我们定义了一个 `Node` 结构体表示链表的结点,其中包括数据、前驱结点和后继结点三个成员变量。我们还定义了 `createNode` 函数用于创建链表结点,以及 `deleteNode` 函数用于删除某个结点。
在 `deleteCommonNodes` 函数中,我们对两个链表中的每一个结点进行比较,如果它们的数据相同,则删除它们。在删除结点时,我们调用 `deleteNode` 函数删除结点,并将该结点的前驱结点和后继结点进行连接。
在 `main` 函数中,我们创建了两个双向链表并分别赋值,然后调用 `deleteCommonNodes` 函数删除它们的相同结点。最后,我们遍历两个链表并输出它们的值,以检查删除操作是否成功。
需要注意的是,此示例代码仅适用于数据类型为整数的链表。若要支持其他数据类型,需要相应地修改代码。