反转链表
题目描述
输入一个链表,反转链表后,输出链表的所有元素。
思路
利用栈的先进后出的特点,遍历链表,将结点依次存入栈中,再依次弹出栈中结点,保存到结果链表中返回
代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL || pHead->next==NULL)
return pHead;
stack<ListNode*> stack1; //栈
ListNode* ptmp = pHead;
while(ptmp->next!=NULL){ //依次入栈,若ptmp指向尾结点,则结束入栈
stack1.push(ptmp);
ptmp = ptmp->next;
}
ListNode* ReverseHead;
ReverseHead = ptmp; //新的头结点即为原链表的尾结点
while(!stack1.empty()){
ptmp->next = stack1.top(); //栈顶元素为当前结点的next结点
stack1.pop();
ptmp = ptmp->next;
}
ptmp->next = NULL; //新的尾结点的next域为NULL
return ReverseHead;
}
};