本题要求实现一个函数,对带有头结点的单链表进行就地逆置。
函数接口定义:
void reverse ( LinkList L );
L是带头结点的单链表的头指针。
裁判测试程序样例:
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; LinkList Create(); void print(LinkList L); void reverse ( LinkList L); int main() { LinkList L = Create(); print(L); printf("\n"); reverse(L); print(L); return 0; } LinkList Create() { LinkList L,p,s; ElemType e; L = (LinkList)malloc(sizeof(LNode)); p=L; scanf("%d",&e); while(e!=-1) { s = (LinkList)malloc(sizeof(LNode)); s->data=e; p->next = s; p=s; scanf("%d",&e); } p->next=NULL; return L; } void print(LinkList L) { LinkList p; p=L->next; while (p) { printf("%d ", p->data); p =p->next; } } /* 请在这里填写答案 */
输入样例:
1 2 3 4 5 6 -1
输出样例:
1 2 3 4 5 6
6 5 4 3 2 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void reverse (LinkList L)
{
LNode *prev=NULL;
LNode *curr=L->next;
LNode *next =NULL;
while(curr!=NULL)
{
next=curr->next;//保存当前节点的下一个节点
curr->next=prev;//将当前节点的next指针指向前一个节点
prev=curr;//将prev移动到当前节点
curr=next;//将curr移动到下一个节点
}
L->next=prev;链表新头节点的next指向逆置后的第一个结点
}