剑指offer——反转链表

反转链表

题目描述

输入一个链表,反转链表后,输出新链表的表头。

使用栈操作。

/*
struct ListNode {
 int val;
 struct ListNode *next;
 ListNode(int x) :
   val(x), next(NULL) {
 }
};*/
class Solution {
     
public:
    ListNode* ReverseList(ListNode* pHead) {
     
        ListNode* newhead=new  ListNode(-1);//目标链表头结点
        ListNode* p1=newhead;//设置目标链表指针
        stack<int> s;
        ListNode* p=pHead;//操作链表
        while(p!=NULL)//入栈
        {
     
            s.push(p->val);
            p=p->next;
        }
        while(!s.empty())
        {
     
            int num=s.top();
            s.pop();
            ListNode* q=new  ListNode(-1);
            q->val=num;//尾插法插入
            p1->next=q;
            p1=q;
        }
        return newhead->next;
    }
};

你可能感兴趣的:(数据结构)