逆序打印链表
逆序打印链表,想实现逆序,很容易想到栈这个数据结构,栈的先进后出特性可以实现逆序。
首先初始化stack、用于输出的vector、当前指针cur
vector<int> res;
//辅助栈,用于逆序
stack<int> tmp;
ListNode* cur = head;
通过循环先将链表中的元素依次存入栈中
//依次将链表元素加入栈中
while (cur != NULL)
{
tmp.push(cur->val);
cur = cur->next;
}
再将元素从栈中弹出,存入vector实现逆序
//将栈中元素存入vector中
while (!tmp.empty())
{
res.push_back(tmp.top());
tmp.pop();
}
反转链表
输入链表 1->2->3->4
输出链表 4->3->2->1
此题采用双指针的方法,首先初始化两个指针 cur->head, pre->null分别指向链表的头节点与尾节点。
再初始化一个 临时节点tmp用于记录cur的下一个节点
ListNode* cur = head, * pre = nullptr, * tmp;
开始循环遍历,终止条件为 cur = NULL
cur用于指向当前遍历的节点,pre用于指向反转后的链表的前节点。
初始化后,首先用tmp记录cur->next,如果不先记录cur->next,则当断开cur->next后,就丢失了下一个节点的位置。
tmp = cur->next;
再将cur.next断开,并改为指向pre,此时第一个节点变成最后一个节点,实现反转。
cur->next = pre;
pre指针向 前 移动,指向此时的cur
pre = cur;
由于tmp记录的是cur的后节点,这时发挥作用,将cur指向tmp,实现向前移动
cur = tmp;
下一步再跳至循环开始,用tmp记录cur->next