1 单链表如何逆置
逆置1 :一直头插即可
bool Reverse(PNode plist)
{
assert(plist!=NULL);
Node *p=plist->next;
Node*q;
plist->next=nullptr; //让头结点断开,方便尾部为空。
while(p!=NULL)
{
q=p->next;
p->next=plst->next;
plist->next=p;
p=q;
}
}
逆置2:通过三个指针逆置
void Reverse(PNode plsit)
{
assert(plist!=NULL&&plist->next!=NULL); //让链表至少存在一个有效结点
Node *p=plist->next;
Node *q=p->next;
Node *r; //r是定位指针 在pq交换完后可以往后继续交换
p->next=NULL;
while(q!=NULL) //一直是p和q交换 所以要判断后面那个不为空
{
r=q->next;
q->next=p
p=q;
q=r;
}
plist->next=q;
}
2 如何判断两个单链表是否相交
如果只看是否有交点 可以让定义两个指针跑到两个单链表尾部,判断尾部是否相等。单链表的next域唯一,所以如果有交点,尾部必定相等。
bool Intersect(PNode *plist1,PNode *plist2)
{
//assert
Node