剑指Offer-15.反转链表(C++/Java)

题目:

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

分析:

可以利用栈将链表元素依次压入栈中,再从栈中弹出元素重新建立链表,返回头节点。

也可以在原有的链表上来翻转,先保存当前节点的下一个节点,然后将当前节点的next,指向当前节点的前一个节点,然后再将p和prev更新求解即可。

程序:

C++

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(pHead == nullptr) return nullptr;
        ListNode* p = pHead;
        ListNode* pPrev = nullptr;      
        while(p){
            ListNode *pTemp = p->next;
            p->next = pPrev;
            pPrev = p;
            p = pTemp;
        }
        return pPrev;
    }
};

Java

public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null) return null;
        ListNode p = head;
        ListNode pPrev = null;
        while(p != null){
            ListNode pTemp = p.next;
            p.next = pPrev;;
            pPrev = p;
            p = pTemp;
        }
        return pPrev;
    }
}
原文地址:https://www.cnblogs.com/silentteller/p/11879333.html