从尾到头打印链表(三指针法)

来源:互联网 发布:js转换日期格式 编辑:程序博客网 时间:2024/06/06 00:09

输入一个链表,从尾到头打印链表每个节点的值。

/**

*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        ListNode*  newList=new ListNode(0);
        ListNode*  newnode=head;
        ListNode*  oldnode=head;
        while(oldnode!=NULL)  
        {
             if (newList->next!=NULL)   
              {
                 newnode=newnode->next;    //移动下一节点
                 oldnode->next=newList->next;    //用oldnode来记录倒置链表
                 newList->next=oldnode;   //新链表存旧节点
                 oldnode=newnode;   //记录新节点
             }
            else //第一次运行
             {
                newList->next=oldnode;    //新链表存第一节点
                newnode=oldnode->next;  //移动下一节点
                oldnode->next=NULL;     //oldnode头节点为NULL
                oldnode=newnode;   //记录新节点
            }
        }
        oldnode=newList->next;  
        vector<int>  a;
        while(oldnode!=NULL)   //输出
        {
            a.push_back(oldnode->val);
            oldnode=oldnode->next;
        }
      return a;
    }
};


思想是建立一个栈,然后遍历链表放进去,然后再出栈赋值给新链表。

这里没有直接使用栈,是使用栈的思想。使用了三个指针存储。


转载https://www.nowcoder.com/profile/6164120/codeBookDetail?submissionId=16219349



原创粉丝点击