1-2 链表逆置pta

it2023-10-16  74

1-2 链表逆置 (20分) 本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:

struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *reverse( struct ListNode *head ); 其中head是用户传入的链表的头指针;函数reverse将链表head逆置,并返回结果链表的头指针。

裁判测试程序样例: #include <stdio.h> #include <stdlib.h>

struct ListNode { int data; struct ListNode *next; };

struct ListNode *createlist(); /裁判实现,细节不表/ struct ListNode *reverse( struct ListNode *head ); void printlist( struct ListNode *head ) { struct ListNode *p = head; while § { printf("%d “, p->data); p = p->next; } printf(”\n"); }

int main() { struct ListNode *head;

head = createlist(); head = reverse(head); printlist(head); return 0;

}

/* 你的代码将被嵌在这里 */ 输入样例: 1 2 3 4 5 6 -1 输出样例: 6 5 4 3 2 1

思路是 例如1->2->3->4,代码的实现是 (1)1->NULL; (2)2->1 (3)3->2 (4)4->3 逆置的核心步骤 循环 直至为空 p=head; //p=1 head=1//p=2 head=2 head=head->next;//head=2 //head=3 p->next=q->next; //1->NULL//2->1 q->next=p; //q=1//q=2

struct ListNode *reverse( struct ListNode *head ) { struct ListNode *p=NULL,*q=NULL; while(head!=NULL) { p=(struct ListNode *)malloc(sizeof(struct ListNode)); p->data=head->data;// p->next=q;//1->NULL 2->1 q=p;//q往前走 q=NULL q=1 q=2 head=head->next;//head=1 head=2 head=3 } return p; }
最新回复(0)