我做的网站在手机里滑动怎么这里卡,河北做it的网站,广州做韩国网站,南平建设局网站题目描述
输入一个链表#xff0c;反转链表后#xff0c;输出新链表的表头。 示例1 输入 复制 {1,2,3} 返回值 复制 {3,2,1}
题解#xff1a;
如果用偷懒的方法#xff0c;可以用vector来存链表内容#xff0c;然后来个翻转#xff08;vector自带#xff09;即可 但是…题目描述
输入一个链表反转链表后输出新链表的表头。 示例1 输入 复制 {1,2,3} 返回值 复制 {3,2,1}
题解
如果用偷懒的方法可以用vector来存链表内容然后来个翻转vector自带即可 但是我们不可能光靠这种方法来讲一下正解 通过图我们可以看出其实翻转链表也就是将指向翻转 所以我们需要一个链表s作为存新数据也就是翻转后的数据 还需要一个q作为中间变量 链表p为题目所给的pHead 步骤 先用q存p的下一个节点的地址这样是因为后续p有其他操作如果不提前保存会丢失 然后将p-nexts,将当前节点与链表中断并指向s 然后将sp 这两步操作可以理解为将当前节点从原链表中取出并将下一个节点指向当前节点相当于调转了箭头方向 从原本的 p — p-next 变成了 p-next ----p 然后这个是存在s内的 最后将pq相当于原本暂存的东西还给p使得p的后续没有发生改变
代码
/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* ReverseList(ListNode* pHead) {if(pHeadNULL)return NULL;ListNode * ppHead;ListNode * sNULL;ListNode * qNULL;while(p!NULL){qp-next;//先用q来记录下一个节点的地址p-nexts;//让当前节点与链表中断并指向前一个节点ssp;//s指向当前节点pq;//p指向q而q存的是下一个节点的地址}return s;}
};