链表反转
Posted yangyalong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表反转相关的知识,希望对你有一定的参考价值。
题目:反转一个单链表。
实例:输入: 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;
}
以上就是解题心得,如果有错误或有疑问欢迎大家指出,大家共同进步。
以上是关于链表反转的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(Python):链表类:第92题:反转链表 II:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。