美文网首页
实现链表翻转的两种方法

实现链表翻转的两种方法

作者: Jarkata | 来源:发表于2021-02-24 23:34 被阅读0次

    题目

    思路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;
        }
    

    参考

    单链表反转总结篇
    实现链表翻转的两种方法

    相关文章

      网友评论

          本文标题:实现链表翻转的两种方法

          本文链接:https://www.haomeiwen.com/subject/mnnefltx.html