这道题的挑战是在原地进行链表的翻转,我用了三个指针,两个指头指针,一个指头指针的下一个,其中 r 固定指向最开始的头不变,其余的 q 和 p 用来指向过程中的节点。
我最开始只使用了两个指针 p 和 q,发现结果只能显示两个节点,也就是说明链表没连上,通过画图发现,我的方法在进行第三个节点连接时,p指针,也就是最开始指向头节点的指针发生了变化,所以我又使用了一个指针,来固定原来的头节点。
class Solution {
public:
/*
* @param head: n
* @return: The new head of reversed linked list.
*/
ListNode *reverse(ListNode *head) {
// write your code here
if(head == NULL) return head;
ListNode *p = head;
ListNode *q = head->next;
ListNode *r = head;
while(q != NULL)
{
r->next = q->next;
p = r->next;
q->next = head;
head = q;
q = p;
p = head;
}
return head;
}
};
2018/1/25