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