链表
寻找节点
利用快慢指针解决问题
中间节点
快指针两步一走,慢指针一步一走
快指针走到头停止的时候
慢指针即走到中间
因为快指针是两步一走,所以结束条件是
对于奇数个数据:
如果p=NULL了,那就停止
对于偶数个数据:
如果p->next=NULL了,那就停止
p代表快指针
倒数第k个节点
判断链表是否有环
如果有环,终有一日 p 和 q 会相遇
相遇了就结束,return 1了
如果走到了(p!=NULL&&p->next!=NULL)这一步,还没相遇
那就是没有环了,就打印无环,并 return 0 了
循环条件是(p!=NULL&&p->next!=NULL)
因为这是没有环时候的判断
这种情况下分为奇偶个数据
因为我们的指针有俩,两个快慢指针
所以判断同上
(
对于奇数个数据:
如果p=NULL了,那就停止
对于偶数个数据:
如果p->next=NULL了,那就停止
p代表快指针
)
链表逆序
头插方式
p=phead->next;
phead->next=NULL;
p去到首节点,并把头节点与首节点断开,让后续插数使用
node_t *q=p->next;
p->next=phead->next;
phead->next=p;
p=q;
q去到1号节点
把头节点指向的空间给到首节点的指针域
如果头节点指向的空间是NULL,那么首节点指针域里面就是NULL了
后续别的数字再插入到头节点后面(即首节点前面)
这个时候首节点就相当于去到了最后,成为了尾节点
但只有第一次的 phead->next 是NULL,后续把p的地址给到 phead->next 了
p 和 q 各往下窜,进行循环