用C或C++编程实现链表,要求链表的定义至少包含(1)创建链表(2)链表的按位查找(3)链表的按位插入和按位删除(4)按位获取某个元素等功能;然后实现两个有序链表的合并操作(允许重复元素)。
时间: 2024-10-22 18:09:59 浏览: 35
在C或C++中,我们可以使用结构体和指针来实现链表。首先,我们需要定义一个链表节点,它通常包含数据域(如int类型)和指向下一个节点的指针:
```c++
// 链表节点定义
struct ListNode {
int data;
ListNode* next;
};
```
以下是链表的基本操作:
1. **创建链表** (初始化空链表):
```c++
ListNode* createList() {
return nullptr; // 创建一个空链表的头指针
}
```
2. **链表按位查找** (二分查找,假设列表已排序) :
```c++
bool search(int target, ListNode* head) {
if (!head || head->data == target) return true;
if (head->data > target) return false;
return search(target, head->next);
}
```
3. **链表按位插入** 和 **按位删除**:
- 插入:找到目标位置并插入新节点
```c++
void insert(int target, int value, ListNode*& head) {
ListNode* newNode = new ListNode{value};
if (!head || head->data < target) {
newNode->next = head;
head = newNode;
} else {
ListNode* current = head;
while (current->next && current->next->data < target) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
void remove(int target, ListNode*& head) {
if (!head || head->data == target) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* current = head;
while (current->next && current->next->data != target) {
current = current->next;
}
if (current->next) {
ListNode* temp = current->next;
current->next = current->next->next;
delete temp;
}
}
```
4. **按位获取某个元素**:
```c++
int get(int index, ListNode* head) {
if (index < 0 || !head) return -1;
ListNode* current = head;
for (int i = 0; i < index && current; ++i, current = current->next) {}
return current ? current->data : -1; // 如果找到了就返回值,否则返回-1
}
```
最后,对于两个有序链表的合并操作(允许重复元素),可以遍历每个链表并将较小的元素添加到结果链表中:
```c++
ListNode* mergeSortedLists(ListNode* list1, ListNode* list2) {
ListNode dummy(0); // 建立虚拟头结点
ListNode* tail = &dummy;
while (list1 && list2) {
if (list1->data <= list2->data) {
tail->next = list1;
list1 = list1->next;
} else {
tail->next = list2;
list2 = list2->next;
}
tail = tail->next;
}
// 如果其中一个链表还有剩余元素
if (list1) tail->next = list1;
if (list2) tail->next = list2;
return dummy.next;
}
```
阅读全文