码迷,mamicode.com
首页 > 编程语言 > 详细

经典链表翻转(C/C++)

时间:2021-06-06 19:05:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:inf   状态   返回   ++   mic   反转   reverse   class   需要   

题目

1、描述
输入一个链表,反转链表后,输出新链表的表头。

2、示例
输入:

{1,2,3}

输出:

{3,2,1}

思路

1、初始化:3个指针
(1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向nullptr
(2)cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head
(3)nex指针指向待反转链表的第二个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存

2、接下来,循环执行以下三个操作,改变链表指向3
(1)保存下一个节点
p_next = p_cur->next;
(2)未反转链表的第一个节点的下个指针指向已反转链表的最后一个节点
p_cur->next = p_pre;
(3)节点后移
p_pre = p_cur;
p_cur = p_next;

备注:
循环条件,当然是p_cur != nullptr
循环结束后,p_cur当然为nullptr,所以返回p_pre,即为反转后的头结点

3、图例
(2)初始状态
技术图片

(2)改变指向,节点后移
技术图片

(3)完成翻转后结果
技术图片

代码

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(NULL == pHead)
            return NULL;
        ListNode *p_cur = pHead;
        ListNode *p_next = pHead->next;
        ListNode *p_pre = NULL;
        while(p_cur)
        {
            p_next = p_cur->next;
            p_cur->next = p_pre;
            p_pre = p_cur;
            p_cur = p_next;
        }
        return p_pre;
    }
};

经典链表翻转(C/C++)

标签:inf   状态   返回   ++   mic   反转   reverse   class   需要   

原文地址:https://www.cnblogs.com/veis/p/14854326.html

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