PTA题目集|6-5 链表逆置(20 分)——头插或者重开新链表头插

6-5 链表逆置(20 分)
本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:
struct ListNode {
int data;
struct ListNode *next;
};
函数接口定义:
struct ListNode *reverse( struct ListNode *head );
其中head是用户传入的链表的头指针;函数reverse将链表head逆置,并返回结果链表的头指针。
裁判测试程序样例:

#include #include 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 (p) { printf("%d ", p->data); p = p->next; } printf("\n"); }int main() { struct ListNode*head; head = createlist(); head = reverse(head); printlist(head); return 0; }

/* 你的代码将被嵌在这里 */
输入样例:
【PTA题目集|6-5 链表逆置(20 分)——头插或者重开新链表头插】1 2 3 4 5 6 -1
输出样例:
6 5 4 3 2 1
struct ListNode *reverse(struct ListNode *head) { struct ListNode *newhead=NULL, *tail=NULL,*p=head; while (p) { tail = p->next; //记录后驱 p->next = newhead; //插到前面 newhead = p; //更新 p = tail; //下一个 } return newhead; }

struct ListNode *reverse(struct ListNode *head) { struct ListNode *newhead=NULL, *now=NULL; while (head) { now = (struct ListNode*)malloc(sizeof(struct ListNode)); now->data = https://www.it610.com/article/head->data; now->next = newhead; newhead=now; head = head->next; } return now; }

这里写代码片

    推荐阅读