版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29567701/article/details/79934929
1:要求
单链表L1: 1–>3–>5–>7
单链表L2: 2–>4–>6–>8
连接后: 1–>3–>5–>7–>2–>4–>6–>8
2:连接代码
单链表的结构定义如下:
struct ListNode
{
int m_nValue;//链表结点值
ListNode* m_pNext;
};
连接代码 方法一:
连接后生成新的链表:
ListNode *MyUnion(ListNode *pHead1, ListNode *pHead2)
{
ListNode *pNode = pHead1;
while (pNode->m_pNext)
pNode = pNode->m_pNext;
pNode->m_pNext = pHead2;
return pHead1;
}
连接代码 方法二:
不生成新链表,将链表L2 直接链在 链表L1的尾巴上,改变链表L1,使用 引用&,
代码如下:
void ConnectedLists2(ListNode * &pHead1, ListNode *pHead2)
{
ListNode *pNode = pHead1;
while (pNode->m_pNext)//while (pNode)错误 特别注意:是pNode->m_pNext
pNode = pNode->m_pNext;
pNode->m_pNext = pHead2;
}
两种方法经测试均可用。
3、测试代码
#include<iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
//---------------------MyUnion()---------------------------------------------
ListNode *MyUnion(ListNode *pHead1, ListNode *pHead2)
{
if (pHead1 == NULL)//考虑两个链表有一个为空
return pHead2;
if (pHead2 == NULL)
return pHead1;
ListNode *pNode = pHead1;
while (pNode->m_pNext)
pNode = pNode->m_pNext;
pNode->m_pNext = pHead2;
return pHead1;
}
//------------------------------------------------------------------
ListNode* CreateNode(int value)
{
ListNode *pNode = new ListNode();
pNode->m_nValue = value;
pNode->m_pNext = NULL;
return pNode;
}
void ConnectedNodes(ListNode* pnode1, ListNode* pnode2)
{
if (pnode1 == NULL)
exit(1);
pnode1->m_pNext = pnode2;
}
void DestroyNodes(ListNode* &pHead)
{
ListNode *pNode = pHead;
while (pNode)
{
pHead = pHead->m_pNext;
delete pNode;
pNode = pHead;
}
}
void DispLisNode(ListNode* pHead)
{
ListNode *pNode = pHead;
while (pNode)
{
cout << pNode->m_nValue;
if (pNode->m_pNext)
cout << "-->";
pNode = pNode->m_pNext;
}
cout << endl;
}
//--------------------------------------------------------------------
int main()
{
ListNode* pNode1 = CreateNode(1);
ListNode* pNode2 = CreateNode(2);
ListNode* pNode3 = CreateNode(3);
ListNode* pNode4 = CreateNode(4);
ListNode* pNode5 = CreateNode(5);
ListNode* pNode6 = CreateNode(6);
ListNode* pNode7 = CreateNode(7);
ListNode* pNode8 = CreateNode(8);
ConnectedNodes(pNode1, pNode3);
ConnectedNodes(pNode3, pNode5);
ConnectedNodes(pNode5, pNode7);
DispLisNode(pNode1);
ConnectedNodes(pNode2, pNode4);
ConnectedNodes(pNode4, pNode6);
ConnectedNodes(pNode6, pNode8);
DispLisNode(pNode2);
ListNode* node1 = MyUnion(pNode1, pNode2);//连接两个链表
DispLisNode(node1);
DestroyNodes(node1);
return 0;
}
测试结果: