单链表的逆置
1->2->3->4->5
5->4->3->2->1
首先我们定义三个指针h、p、q;
灵魂画手
首先
head是头节点
p = head->next;
q = p->next;(head->next->next)
然后先将head->next = NULL;因为1逆置完是尾节点
p->next = head; 让2 ->next = 1
然后head = p; head现在指2了
p = q; p 现在指3了。
q = q->next ; q现在指4了。
变成了俩个链表
2->1
3->4->5
重复上面的操作就好了
下面是代码
head->next = NULL
p = head->next;
q = p->next;
while(q) {
p ->next = head;
head= p;
p = q;
q = q->next;
}
p->next = head;
此时p是头节点5;
查找单链表中的环
双指针法。
俩个指针,一个指针每次走俩步,一个指针每次走一步,如果存在环,则走俩步的最终会追上走一步的
bool hasCycle(struct ListNode *h