在一个带头结点的单链表的第i个结点之前插入另一个带头结点的单链表程序
时间: 2024-03-23 17:17:15 浏览: 57
插入另一个带头结点的单链表到原链表的第i个结点之前的程序如下:
```
// 声明一个结构体表示链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 插入另一个链表到第i个结点之前
void insertList(ListNode* head, ListNode* newHead, int i) {
if (!head || !newHead) return;
ListNode* p = head;
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
if (!p || j != i - 1) return;
ListNode* q = p->next;
p->next = newHead->next;
while (newHead->next) newHead = newHead->next;
newHead->next = q;
}
```
请问,您对这个程序有什么问题或疑问吗?
相关问题
在一个带头结点的单链表的第i个结点之前插入另一个带头结点的单链表
的第j个结点,如何实现?
可以按照以下步骤实现该操作:
1. 遍历单链表,找到第i-1个结点,保存其地址为p;
2. 遍历另一个单链表,找到第j个结点,保存其地址为q;
3. 将p的next指针指向q;
4. 将q的next指针指向原来p的next指向的结点;
5. 新的单链表长度加1。
希望能够解决你的问题!
设计一个算法,将一个结点值为自然数的带头结点单链表拆分为两个带头结点单链表,原表中保留值为偶数的结点,而值为奇数的结点按它们在原表中的相对次序组成一个新的带头结点单链表。
算法如下:
1. 定义两个新的带头结点单链表,分别为evenList和oddList。
2. 遍历原链表,如果结点的值为偶数,则将该结点插入evenList中;如果结点的值为奇数,则将该结点插入oddList中。
3. 遍历完原链表后,将oddList插入到evenList的末尾。
4. 返回evenList和oddList。
代码实现如下:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
pair<ListNode*, ListNode*> splitList(ListNode* head) {
ListNode* evenList = new ListNode(0);
ListNode* oddList = new ListNode(0);
ListNode* evenTail = evenList;
ListNode* oddTail = oddList;
ListNode* cur = head->next;
while (cur != NULL) {
if (cur->val % 2 == 0) {
evenTail->next = cur;
evenTail = evenTail->next;
} else {
oddTail->next = cur;
oddTail = oddTail->next;
}
cur = cur->next;
}
evenTail->next = oddList->next;
oddTail->next = NULL;
return make_pair(evenList, oddList);
}
```
阅读全文