leetcode解题报告(27):Reverse Linked List

描述

Reverse a singly linked list.

分析

一开始写的时候总感觉没抓到要点,然后想起上数据结构课的教材上有这道题,翻开书一看完就回忆起来了,感觉解法挺巧妙的,不比讨论区的答案差。

这道题是放在链栈后面的,用的也是链栈的思想:

依次将原来栈中的元素出栈,并插入到初值为空的另一个链栈中,这样,当原栈为空时,另一个栈就是原来栈中元素的逆序。

代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
       ListNode* p = NULL;  //empty "stack"
       ListNode* u; 
       ListNode* l = head;      //point to original list
       while(l){    //if not NULL
           u = l;   //u points to l
           l = l -> next;   //l points to next
           u -> next = p;   //push the node into "stack" p
           p = u;   //modify the top pointer
       }
       head = p;    //no effect to answer,but it's a good habbit
       return p;    
    }
};
posted @ 2017-06-02 23:19  larryking  阅读(139)  评论(0编辑  收藏  举报