1. 将双向链表从给定的截断点分成两段,两段位置互换成为新链表,若是链表为A-B-C-D-E-F,指定节点C,那么新链表为C-D-E-F-A-B,用C语言编写函数ReGroup 实现此功能
时间: 2024-01-11 15:03:19 浏览: 148
双向链表C语言实现
ReGroup函数的实现如下:
```
#include <stdlib.h>
typedef struct node {
int value;
struct node* next;
struct node* prev;
} Node;
Node* ReGroup(Node* head, Node* point) {
if (head == NULL || point == NULL) {
return NULL;
}
// 找到指定节点的前一个节点
Node* prev = point->prev;
// 如果指定节点是头结点,则不用重组
if (prev == NULL) {
return head;
}
// 将链表分为前半部分和后半部分
prev->next = NULL;
point->prev = NULL;
// 反转后半部分
Node* cur = point;
while (cur->next != NULL) {
Node* temp = cur->next;
cur->next = cur->prev;
cur->prev = temp;
cur = temp;
}
cur->next = cur->prev;
cur->prev = prev;
// 交换前后两部分
Node* tail = head;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = point;
point->prev = tail;
return head;
}
```
在调用此函数时,传入原链表的头结点和指定节点的指针即可得到分组后的新链表的头结点。
阅读全文