码迷,mamicode.com
首页 > 其他好文 > 详细

链表反转

时间:2018-10-05 18:41:32      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:循环   reverse   16px   实例   link   节点   算法   第一个   心得   

题目:反转一个单链表。

实例:输入: 1->2->3->4->5->NULL,输出: 5->4->3->2->1-NULL。

算法:反转一个单链表,可以想成是两两节点之间改变链接方式,将第一个节点链接在第二个节点(程序中指针ptr指向它)的后面,让头指针指向新链表的第一个节点(原链表的第二个节点),然后让原先指向第二个节点(未反转的单链表)的指针指向下一个节点(该程序中我借助一个辅助指针来实现),一直循环,直到ptr指向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;

}

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

链表反转

标签:循环   reverse   16px   实例   link   节点   算法   第一个   心得   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!