定义节点
typedef struct Node {
int data;
struct Node *head;
struct Node *next;
} DoubleLinkNode;
创建双向链表
//创建节点
DoubleLinkNode *rootNode = alloca(sizeof(DoubleLinkNode));
rootNode->data = 10;
rootNode->head = NULL;
rootNode->next = NULL;
DoubleLinkNode *node1 = alloca(sizeof(DoubleLinkNode));
node1->data = 20;
node1->head = NULL;
node1->next = NULL;
DoubleLinkNode *node2 = alloca(sizeof(DoubleLinkNode));
node2->data = 30;
node2->head = NULL;
node2->next = NULL;
DoubleLinkNode *node3 = alloca(sizeof(DoubleLinkNode));
node3->data = 40;
node3->head = NULL;
node3->next = NULL;
//连接节点
rootNode->next = node1;
node1->head = rootNode;
node1->next = node2;
node2->head = node1;
node2->next = node3;
node3->head = node2;
// 反转
DoubleLinkNode *node = reverseDoublelink(rootNode);
反转双向链表
DoubleLinkNode* reverseDoublelink (DoubleLinkNode *node) {
if (node == NULL) {return NULL;}
DoubleLinkNode *pre = NULL;
while (node) {
// 记录下一个节点
DoubleLinkNode *nextTemp = node->next;
// 反转
node->head = nextTemp;
node->next = pre;
// 把前节点置为当前节点
pre = node;
// 把当前节点置为下个节点
node = nextTemp;
}
return pre;
}
双向循环链表节点
typedef struct Node {
int data;
struct Node *head;
struct Node *next;
} DoubleCirculationLinkNode;
双向循环链表创建
//创建节点
DoubleCirculationLinkNode *rootNode = alloca(sizeof(DoubleCirculationLinkNode));
rootNode->data = 10;
rootNode->head = NULL;
rootNode->next = NULL;
DoubleCirculationLinkNode *node1 = alloca(sizeof(DoubleCirculationLinkNode));
node1->data = 20;
node1->head = NULL;
node1->next = NULL;
DoubleCirculationLinkNode *node2 = alloca(sizeof(DoubleCirculationLinkNode));
node2->data = 30;
node2->head = NULL;
node2->next = NULL;
DoubleCirculationLinkNode *node3 = alloca(sizeof(DoubleCirculationLinkNode));
node3->data = 40;
node3->head = NULL;
node3->next = NULL;
//连接节点
rootNode->head = node3;
rootNode->next = node1;
node1->head = rootNode;
node1->next = node2;
node2->head = node1;
node2->next = node3;
node3->head = node2;
node3->next = rootNode;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。