赞
踩
题目如下:
裁判测试程序样例:
- #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 (p) {
- printf("%d ", p->data);
- p = p->next;
- }
- printf("\n");
- }
-
- int main()
- {
- struct ListNode *head;
-
- head = createlist();
- head = reverse(head);
- printlist(head);
-
- return 0;
- }
-
- /* 你的代码将被嵌在这里 */
代码如下:
- struct ListNode *reverse(struct ListNode *head) {
- if(!head || !head->next) { // 检查给定链表是否为空或仅有一个元素
- return head;
- }
- struct ListNode *prev = NULL, *current = head, *next;
-
- // 沿着链表遍历,将每个节点翻转,使其指向原本的前一个节点
- while(current) {
- next = current->next;//将current的下一个结点保存起来,为了在修改current->next指针后仍能找到链表的下一个结点
- current->next = prev;//指向其前面的指针,在这步完成了链表的逆置
- prev = current;//更新prev和current
- current = next;
- }
- //循环结束后,current变为NULL,而prev指针指向原始链表的尾节点,即新链表的头结点
- return prev;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。