链表的创建(c++中链表的创建)

[img]

简介:

链表是一种数据结构,它由一系列节点组成,每个节点包含两个部分,一个是数据域,一个是指针域。指针域指向下一个节点,这使得链表可以动态地添加或删除节点。

多级标题:

1. 单向链表的创建

2. 双向链表的创建

3. 循环链表的创建

内容详细说明:

1. 单向链表的创建

单向链表的创建需要先创建一个头节点,在头节点之后插入其他节点。一个节点包含两部分:数据域和指针域。指针域指向下一个节点,最后一个节点指向null。

代码实现:

```

struct ListNode {

int val;

ListNode *next;

ListNode(int x) : val(x), next(NULL) {}

};

ListNode* createLinkedList(vector nums) {

ListNode *dummyHead = new ListNode(0);

ListNode *cur = dummyHead;

for (int num : nums) {

cur->next = new ListNode(num);

cur = cur->next;

}

return dummyHead->next;

```

2. 双向链表的创建

双向链表与单向链表相似,不同之处在于一个节点有两个指针,一个指向前一个节点,一个指向后一个节点。

代码实现:

```

struct ListNode {

int val;

ListNode *prev;

ListNode *next;

ListNode(int x) : val(x), prev(NULL), next(NULL) {}

};

ListNode* createDoublyLinkedList(vector nums) {

ListNode *dummyHead = new ListNode(0);

ListNode *cur = dummyHead;

for (int num : nums) {

cur->next = new ListNode(num);

cur->next->prev = cur;

cur = cur->next;

}

return dummyHead->next;

```

3. 循环链表的创建

循环链表与单向链表相似,不同之处在于最后一个节点的指针域不是null,而是指向第一个节点。循环链表可以根据具体情况选择单向或双向。

代码实现:

```

struct ListNode {

int val;

ListNode *next;

ListNode(int x) : val(x), next(NULL) {}

};

ListNode* createCircularLinkedList(vector nums) {

if (nums.empty()) {

return NULL;

}

ListNode *head = new ListNode(nums[0]);

ListNode *cur = head;

for (int i = 1; i < nums.size(); i++) {

cur->next = new ListNode(nums[i]);

cur = cur->next;

}

cur->next = head;

return head;

```

标签列表