/*******************************/
题目:反转一个单链表。
实例:输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1-NULL。
/*******************************/
/*******************************/
算法:首先判断该单链表是否为空。若该链表只有一个节点,那么只需要置其指针域为NULL即可。若单链表有多个节点,
先将第一个节点指针域置NULL,然后再把第二个节点插入到第一个节点的前面,以此进行,将后面每一个节点都插入到第
一个节点前,直至到最后一个节点。
/*******************************/
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head) { struct ListNode *ptr, *p; /*定义两个指针*/ if (head == NULL) /*如果一个链表为空*/ return head; ptr = head->next, head->next = NULL; /*令ptr指针指向链表的第二个节点(链表若只有一个节点那么将会指向NULL)*/ /*链表的第一个节点反转之后将会成为最后一个节点,令其指针域为NULL*/ while (ptr != NULL) { p = ptr->next; /*指针p是用来遍历整个链表的*/ ptr->next = head; /*让第一个节点链接在第二个节点的后面*/ head = ptr; /*头指针指向当前的第一个节点*/ ptr = p; /*相当于指针ptr在原链表(需要逆转的链表)中往后移动了一个节点*/ } return head; }
以上就是解题心得,如果有错误或有疑问欢迎大家指出,大家共同进步。