阅读下面算法。说明该算法的功能。Typedef char DataType;typedef struct node{DataType data;struct node *next;}ListNode;typedef ListNode *Linklist;Linklist what(Linklist h){/*h是无头结点的单链表的头指针*/{if(h&&h->next){q=h;h=h->next;p=h;while(p->next)p=p->next;p->next=q;q->next=NULL;h=q;}return(h);}
若有以下定义: struct node { int data; struct node *next; } struct node *p; 已建立如下图所示的链表: ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ p →│data│next┼→│data│next┼→... →│data│NULL│ └──┴──┘ └──┴──┘ └──┴──┘ 指针p指向第一个结点,能输出链表所有结点的数据成员data的循环语句是( )。
若有以下定义: struct node { int data; struct node *next; } struct node *head,*p; 已建立如下图所示的链表: p ↓ ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ head →│data│next┼→│data│next┼→... →│data│NULL│ └──┴──┘ └──┴──┘ └──┴──┘ 能删除指针p所指向结点的程序段是( )。
若有以下定义: struct node { int data; struct node *next; } *p,*q,*t; 指针p、t和q分别指向图中所示结点: p t q ↓ ↓ ↓ ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ │data│next┼→│data│next┼→│data│next┼→... └──┴──┘ └──┴──┘ └──┴──┘ 现要将t和q所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是( )
若有以下定义: struct node { int data; struct node *next; } struct node m,n,k, *head, *p; 已建立如下图所示的链表: m n k ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ head →│data│next┼ →│data│NULL│ p → │data│next│ └──┴──┘ └──┴──┘ └──┴──┘ 指针head指向变量m, m.next指向变量n,p指向变量k,不能把结点k插到m和n之间形成新链表的程序段是( )。
若有以下定义: struct node { int data; struct node *next; } *p,*q; 已建立如下图所示的链表: ┌──┬──┐ ┌──┬──┐ ... p →│data│next┼→│data│NULL│ └──┴──┘ └──┴──┘ ┌──┬──┐ q →│data│next│ └──┴──┘ 不能将指针q所指结点连到上图所示链表末尾的语句是( )。
若有定义: struct node { int data; struct node *next;}; 已建立如下图所示的链表: ┌─┬─┐ ┌─┬─┐ ┌─┬─┐ head →│2 │ ┼→│4 │ ┼→…→│28│ ┼→NULL └─┴─┘ └─┴─┘ └─┴─┘ 指针head指向链表首结点,以下函数的功能是( )。 void fun(struct node * head) { struct node * p = head; while(1) { p = p->next; printf("%d ", p->data ); if(!p) break; } }