前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链表中穿针引线

链表中穿针引线

作者头像
宇宙之一粟
发布2020-10-26 10:37:56
3290
发布2020-10-26 10:37:56
举报
文章被收录于专栏:宇宙之_一粟

通常操作NEXT指针。这个指针指向哪里

206. Reverse Linked List

反转一个单链表。

示例:

代码语言:javascript
复制
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?


解题思路一:迭代

首先需要一个next保存下一个节点的位置;

然后需要一个pre保存上一个节点的位置。

pre -- cur -- next

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* pre = NULL;
        ListNode* cur = head;
        while( cur != NULL) {
            ListNode* next = cur->next;
            
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
};

解题思路二:递归

首先反转所有节点,然后再反转。 然后我们需要将head设置为反向列表中的最后一个节点。 我们只需将其下一个节点设置在原始列表中(head-> next)指向它,并将其下一个设置为NULL。

代码语言:javascript
复制
ListNode* reverseList(ListNode* head) {
        if (!head || !(head -> next)) {
            return head;
        }
        ListNode* node = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return node;
    }

92. Reverse Linked List II

反转从位置 mn 的链表。请使用一趟扫描完成反转。

说明: 1 ≤ mn ≤ 链表长度。

示例:

代码语言:javascript
复制
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

83. Remove Duplicates from Sorted List

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 206. Reverse Linked List
    • 解题思路一:迭代
      • 解题思路二:递归
      • 92. Reverse Linked List II
      • 83. Remove Duplicates from Sorted List
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档