r=p——将p赋给r。
虽然看不到上下文,但大致意思是执行这两后,就将p指向的链表接在了r指向的结点后,并r的指向向后移动了一个结点……供参考。
?是C语言中的三元运算符,格式如下:
(逻辑表达式1)?表达式2:表达式3;
当逻辑表达式1为真时,整个三元运算表达式返回表达式2的结果,否则返回表达式3的结果。
如下代码
r->next =p ?p:q?前应该是一个逻辑表达式,这里的p可以视为if(p)
即结构指针p不为NULL时,返回p所保存的指针,否则返回q保存的指针。
c++写的,在vc上能够运行#include <iostream>
using namespace std
struct Node
{
int Value
Node *next
}
//创建链表
Node *CrtNode(int n)
{
Node *head //声明头指针head
Node *p,*s
int x
head=new Node //创建头结点由head指向(空的头结点)
s=head
cout<<"请输入数字:"<<endl
for(int i=0i<ni++)
{
p=new Node //创建一个结点
cin>>x
p->Value=x //把输入的x的值赋给创建的结点
s->next=p //把创建的结点由s的next指向
s=p //指针s的指向向后移一个结点
}
p->next=NULL//最后一个结点的next指向空
return head //返回头指针
}
//显示
void ShowNode(const Node *head)
{
Node *p
//显示除头结点以后所有结点(因为创建时头结点为空)
p=head->next
while(p!=NULL)
{
cout<<p->Value<<" "
p=p->next
}
cout<<endl
}
void Delete(Node *head)
{
Node *p,*s
s = head
p = s->next
if(p == NULL)
cout<<"这是一个空链表!"<<endl
while(p)
{
p = s->next
if(p->Value%2 !=0)
{
s->next = p->next
delete p
}
else
{
s = p
p = p->next
}
}
}
int main()
{
Node *head
head = CrtNode(12)
Delete(head)
ShowNode(head)
return 0
}