链表反转

/*******************************/

题目:反转一个单链表。

实例:输入: 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;

}

以上就是解题心得,如果有错误或有疑问欢迎大家指出,大家共同进步。

原文地址:https://www.cnblogs.com/yangyalong/p/9745191.html