题目:
输入一个链表,反转链表后,输出新链表的表头。
分析:
可以利用栈将链表元素依次压入栈中,再从栈中弹出元素重新建立链表,返回头节点。
也可以在原有的链表上来翻转,先保存当前节点的下一个节点,然后将当前节点的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;
}
}