怎么理解c语言链表的这两个语句,r->next=p;r=p;

Python011

怎么理解c语言链表的这两个语句,r->next=p;r=p;,第1张

r->next=p——让指针r指向的结点的下一个结点的指针等于指针p。

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

}