题目
- 从尾到头打印链表_牛客网
https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking - reorder-list_牛客网
https://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b?tpId=46&tqId=29037&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
思路1:借助栈
利用栈先进后出的特点,将每个节点按顺序存入栈中,再从顶到底连接栈中的每个节点
注意倒数第二行代码 p->next=nullptr!!!要将翻转后的最后一个节点(即原链表的第一个节点)的next置为nullptr,不然后果可想而知~
ListNode* reverseList(ListNode* head){
stack<ListNode*> stk;
ListNode *reverseHead=new ListNode(0),*p=reverseHead,*tmp;
while(head){
stk.push(head);
head=head->next;
}
while(!stk.empty()){
tmp=stk.top();
p->next=tmp;
stk.pop();
p=p->next;
}
p->next=nullptr;
return reverseHead->next;
}
思路2:就地操作(推荐)
ListNode* reverseList(ListNode* head){
ListNode* p=nullptr,*tmp;
while(head){
tmp=head->next;
head->next=p;
p=head;
head=tmp;
}
return p;
}