解题思路
1.三指针法:两个指针指向局部反转的两个节点操作反转,另外一个指针tmp保存其后链表的地址,反转前先用tmp保存地址,反转后指针2赋值给指针1,指针tmp赋值给指针2。
2.这里实际操作的是指针1和指针2,跳出while的条件用其中后面的那一个。
3.这里要注意原来的第一个节点反转后要指向NULL,只要将NULL也视为一个节点,指针1的初始值赋值为NULL即可统一操作。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *p = NULL;
struct ListNode *q = head;
while(q)
{
struct ListNode *tmp = q->next;
q->next = p;
p = q;
q = tmp;
}
return p;
}