LeetCode-Reorder List-链表重排序-链表和栈的应用
https://oj.leetcode.com/problems/reorder-list/
需要一个栈以每次取得链表尾部的结点。有了这个栈以后,这个问题就是一个链表操作问题。
对于链表的操作,需要在纸上画好每次需要调整哪些结点以及其next指针。并且一定要注意边界条件。
这个题目需要注意的是栈顶元素被重排序后,新的栈顶元素的next需要设置为NULL。然后需要注意循环的终止条件。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void reorderList(ListNode *head) {
if (head==NULL){return;}
stack <ListNode *> st;
ListNode *p=head;
while(p!=NULL){
st.push(p);
p=p->next;
}
if (st.size()==1){return;}
p=head;
ListNode *q=st.top();
st.pop();
while(p->next!=NULL){
if (p->next==q){break;}
ListNode *r=p->next;
st.top()->next=NULL;
p->next=q;
q->next=r;
p=r;
q=st.top();
st.pop();
}
}
};
浙公网安备 33010602011771号