反转链表

来源:互联网 发布:结婚摄像后期制作软件 编辑:程序博客网 时间:2024/05/18 09:29

解一:
将两个节点逆序非常容易,但是大于两个的时候 就需要考虑:如何在逆序的时候注意死循环:即只有当cur和tmp指的都是当前节点的时候,cur ->next = prev ,就会发生死循环, 而偏偏这个情况很容易发生

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};*/class Solution {public:    ListNode* ReverseList(ListNode* pHead) {        if (pHead == NULL)            {            return NULL;        }        else if(pHead == NULL)            {            return pHead;        }        ListNode* cur = pHead;        ListNode* prev = NULL;        ListNode* tmp  = pHead->next;        while(tmp)            {                 prev = cur;                       cur = tmp;            tmp = tmp ->next;            cur ->next = prev;        }        pHead->next= NULL;        pHead = cur;        return pHead;    }};

解二:
使用一个栈来解决问题,C++

/*struct ListNode {  int val;  struct ListNode *next;  ListNode(int x) :      val(x), next(NULL) {  }};*/class Solution {public:  ListNode* ReverseList(ListNode* pHead) {        if(pHead==NULL||pHead->next == NULL)        {            return pHead;        }        ListNode * p=pHead;        ListNode * newHead;        stack<ListNode *> stack1;        while(p->next!=NULL)        {            stack1.push(p);            p=p->next;        }        newHead = p;        while(!stack1.empty())        {          p->next=stack1.top();            p=p->next;            stack1.pop();        }        p->next=NULL;        return newHead;  }};
0 0
原创粉丝点击