首页 > 代码库 > 链表学习一:单链表创建-头插入与尾插入

链表学习一:单链表创建-头插入与尾插入

  链表的创建过程是一个动态的生成过程,创建链表有两种思路,一种是从表头插入,另一种是从表尾插入。

  表头插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止。

  表尾插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志为止。

  两种方法C++实现如下:

 1 #include<iostream> 2 using namespace std; 3  4 typedef int elemtype; 5 typedef struct node 6 { 7     elemtype m_nData; 8     node* m_pNext; 9 }ListNode;10 11 //创建链表一:头插法建表12 ListNode* CreateList(ListNode* m_pHead){13     m_pHead = new ListNode;                              14     if (!(m_pHead))15     {16         cout << "分配内存空间失败!";17     }18     int  listsize = 10;19     cout << "请输10个数字:"<<endl;20     m_pHead->m_pNext= NULL;21     for (int i = listsize; i > 0; i--)22     {23         ListNode* m_pTemp = m_pHead;24         ListNode*m_pNewNode = new ListNode;25         cin>> m_pNewNode->m_nData;26         m_pNewNode->m_pNext = m_pTemp->m_pNext;27         m_pTemp->m_pNext = m_pNewNode;28     }29     return m_pHead;30 }31 32 //创建链表二:尾插法创建33 ListNode* CreateList2(ListNode* m_pHead){34     m_pHead= new ListNode;35     if (!(m_pHead))36     {37         cout << "分配内存空间失败!";38     }39     m_pHead->m_pNext = NULL;40     ListNode* pTail =m_pHead;41 42     int  listsize = 10;43     cout << "请输10个数字:" << endl;44     45     for (int i = listsize; i >0; i--)46     {47         ListNode* pNewNode = new ListNode;48         cin >> pNewNode->m_nData;49         pTail->m_pNext = pNewNode;50         pTail = pNewNode;51         pNewNode->m_pNext = NULL;52     }53     return m_pHead;54 }55 //打印链表56 void printList(ListNode* m_pHead){57     ListNode* m_pTemp=m_pHead; 58     while (m_pTemp->m_pNext )59     {60         m_pTemp = m_pTemp->m_pNext;61         cout << m_pTemp->m_nData << "\t";62     }63     cout << endl;64 }65 66 void main()67 {68     ListNode* m_pList=NULL;69     m_pList= CreateList(m_pList);70     printList(m_pList);71 72     ListNode* m_pList2 = NULL;73     m_pList2 = CreateList2(m_pList2);74     printList(m_pList2);75 }

 

链表学习一:单链表创建-头插入与尾插入