题目: 只给定单链表中某个结点p(非空结点),在p前面插入一个结点(删除节点类似)
void insertNode(ListNode* pNode,int k)
{
int m=pNode->data;
pNode->data=k;
ListNode* node=(ListNode*)malloc(sizeof(ListNode));
node->data=m;
node->next=pNode->next;
pNode->next=node;
}
题目:给定单链表,检测是否有环
void HasCicle(ListNode* head)
{
if(head==NULL)
return false;
bool flag=false;
ListNode* p,q;
p=head;
q=head;
while(q!=NULL)
{
p=p->next;
q=q->next;
if(q!=NULL)
q=q->next;
else
break;
if(p==q)
{
flag=true;
break;
}
}
return flag;
}
题目:单链表就地逆置
ListNode* reserve(ListNode* head)
{
if(head==NULL)
return head;
ListNode* p,q,m;
p=head;
head->next=NULL;
q=p->next;
while(q!=NULL)
{
m=q;
q=q->next;
m->next=p;
p=m;
}
return p;
}
题目:两个非降序链表的并集
ListNode* MergerList(ListNode* head1,ListNode* head2)
{
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
ListNode* p1,p2;
if(head1->data>=head2->data)
{
p1=head2;
head2=head2->next;
}
else
{
p1=head1;
head1=head1->next;
}
p2=p1;
while(head1!=NULL&&head2!=NULL)
{
if(head1->data>=head2->data)
{
p2->next=head2;
p2=p2->next;
head2=head2->next;
}
else
{
p2->next=head1;
p2=p2->next;
head1=head1->next;
}
}
if(head2!=NULL)
p2->next=head2;
else
p2->next=head1;
return p1;
}