大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。
一 题目:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值。
代码实现
采用两种方法实现:
(1) 不修改原列表,使用stack的方式实现
(2)修改原列表,对元列表逆序
两种方法都在下面的代码中:
struct Node { int data; Node* pNext; }; class ListEx { private: Node *m_pHead; Node *m_pTail; public: ListEx() { m_pHead = NULL; m_pTail = NULL; } ~ListEx() { Node *pNode = m_pHead; Node *pNext = NULL; while(pNode) { pNext = pNode->pNext; delete pNode; pNode = pNext; } m_pHead = NULL; m_pTail = NULL; } void add(int data) { Node *pNode = new Node; pNode->data = data; pNode->pNext = NULL; if (!m_pHead) { m_pTail = m_pHead = pNode; } m_pTail->pNext = pNode; m_pTail = pNode; } Node* GetHead() {return m_pHead;} // 改变链表的内容,将其逆序 void ReserveList() { m_pTail = m_pHead; Node *p1 = m_pHead; Node *p2 = p1->pNext; p1->pNext = NULL; //关键位置 Node *pTemp = NULL; while (p1 && p2) { pTemp = p2->pNext; // 关键位置 p2->pNext = p1; p1 = p2; p2 = pTemp; } m_pHead = p1; } }; // 从尾打印链表 void PrintList(Node *pHead) { stack<int> NodeStack; Node *pNode = pHead; while (pNode) { NodeStack.push(pNode->data); pNode = pNode->pNext; } while (!NodeStack.empty()) { cout << NodeStack.top(); NodeStack.pop(); } cout << endl; } void main() { ListEx list; list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); list.add(9); Node *pHead = list.GetHead(); cout << "不修改原列表,使用stack方法:" << endl; PrintList(pHead); list.ReserveList(); cout << "修改原列表,将原列表逆序:" << endl; pHead = list.GetHead(); PrintList(pHead); return; }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120171.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...