题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
双链表法
一前一后两个指针遍历链表实现反转。指针pre初始化为NULL,指针p初始化为pHead。每次操作将p->next指向pre,同时两指针前移,直到p为空,此时pre即为反转后链表的头指针。
###代码:
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *pre = NULL, *p = pHead, *t;
while (p != NULL) {
t = p->next;
p->next = pre;
pre = p;
p = t;
}
return pre;
}
};
头插法
新建一个指针head作为反转列表的头指针,遍历原链表,用头插法将所有结点插入到head中,返回head即可。
###代码:
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *head = nullptr;
while (pHead) {
ListNode *t = pHead;
pHead = pHead->next;
t->next = head;
head = t;
}
return head;
}
};
栈
入栈后出栈即可,编码简单,不予给出。