首页 > 其他分享 >206. 反转链表

206. 反转链表

时间:2022-12-14 17:46:18浏览次数:45  
标签:head ListNode cur 206 反转 nullptr next 链表 return

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

 

 1 struct ListNode{
 2     int val;
 3     ListNode* next;
 4     ListNode() : val(0), next(nullptr) {}
 5     ListNode(int x) : val(x), next(nullptr) {}
 6     ListNode(int x, ListNode* next) : val(x), next(next) {}
 7 };
 8 class Solution {
 9 public:
10     ListNode* reverseList(ListNode* head) {
11         if(head == nullptr || head->next == nullptr) return head;
12         stack<ListNode*>* sta = new stack<ListNode*>();
13         ListNode* cur = head;
14         while(cur)
15         {
16             (*sta).push(cur);
17             cur = cur->next;
18         } 
19         ListNode* res = (*sta).top();
20         (*sta).pop();
21         ListNode* r = res;
22         while(!(*sta).empty())
23         {
24             r->next = (*sta).top();
25             (*sta).pop();
26             r = r->next;
27             r->next = nullptr;
28         }
29         return res;
30     }
31     ListNode* reverseList_diedai(ListNode* head){
32         if(head == nullptr || head->next == nullptr) return head;
33         ListNode* pre = nullptr;
34         ListNode* cur = head;
35         ListNode* tmp;
36         while(cur)
37         {
38             tmp = cur->next;
39             cur->next = pre;
40             pre = cur;
41             cur = tmp;
42         }
43         return pre;
44     }
45     ListNode* reverseList_digui(ListNode* head){
46         /* 这样先入递归,在修改指针,返回的会是最先进入循环的head
47             所以如果想要返回最后修改的节点,需要先修改*/
48         // if(head == nullptr || head->next == nullptr) return head;
49         // ListNode* last = reverseList_digui(head->next);
50         // if(last==head)
51         // {
52         //     last->next = nullptr;
53         // }
54         // else{
55         //     last->next = head;
56         // }
57         return reverse(NULL, head);
58     }
59     ListNode* reverse(ListNode* pre,ListNode* cur){
60         if(cur == NULL) return pre;
61         ListNode* temp = cur->next;
62         cur->next = pre;
63 
64         return reverse(cur,temp);
65     }
66 };

 

标签:head,ListNode,cur,206,反转,nullptr,next,链表,return
From: https://www.cnblogs.com/lihaoxiang/p/16982778.html

相关文章

  • 链表中倒数第k个节点
    输入一个链表,输出该链表中倒数第 k 个结点。/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListN......
  • Java泛型链表实现
    ​​链表简介​​代码实现packagecom.chenxixuexi;/***泛型链表*单链表逆置数据--节点*求单链表倒数第K节点*求两个单链表是否相交相交交点*判断单链表是否有......
  • 17-咸鱼学Java-内部类实际应用-Java链表
    ​​内部类​​,​​未使用内部类的链表​​可以点击名字查看。此篇文章主要介绍运用内部类的Java链表的写法。链表正如其名,就像一个一个珠子被串起来,只有前一个珠子和......
  • 删除链表中重复的节点
    在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。/***Definitionforsingly-linkedlist.*structListNode{*intval;*......
  • 在O(1)时间删除链表结点
    给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。假设链表一定存在,并且该节点一定不是尾节点。/***Definitionforsingly-linkedlist.*structLi......
  • 力扣-114-二叉树展开为链表
    按照先序遍历展开展开后仍然为TreeNode,只是左孩子指针一律置空关键在于这个先序的访问过程与各个节点指针的修改操作如何统一不冲突首先就可以排除先序遍历,瞄一眼评论......
  • 链表--删除链表的中间节点
    题目:给定链表的头节点,实现删除链表的中间节点的函数例如:不删除任何节点1->2删除节点21->2->3删除节点21->2->3->4删除节点21->2->3->4->5删除节点31->2->3->4->5......
  • 链表与list
    1.链表实现特点:每一个节点都是在堆内存上独立new出来的,节点内存不连续。即逻辑地址连续,而物理地址不连续。优点:内存利用率高,不需要大块连续内存插入和删除节点......
  • Java中把一个字符串实现反转【杭州多测师_王sir】【杭州多测师】
    Java中把一个字符串实现反转 /***使用StringBuilder的reverse()方法将字符串反转*/publicstaticvoidmain(String[]args){StringBu......
  • 力扣541 反转字符串2
    题目:给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符......