首页 > 其他分享 >链表

链表

时间:2023-04-22 14:25:20浏览次数:33  
标签:head ListNode struct next 链表 return NULL

title: 链表

2、环形链表

快慢指针,快指针一次走两步,慢指针一次走一步。单链表有环的话,快慢指针会相遇。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    if(NULL == head){
        return false;
    }

    struct ListNode *slow = head;
    struct ListNode *fast = head;
    while(slow!=NULL && fast!=NULL && fast->next!=NULL)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast){
            return true;
        }
    }
    return false;
}

有关环的一系列问题,参考https://www.cnblogs.com/kira2will/p/4109985.html

5、反转链表

(1)迭代法

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* reverseList(struct ListNode* head){
    if(NULL==head || NULL==head->next){
        return head;
    }
    struct ListNode* pre = NULL;
    struct ListNode* cur = head;
    struct ListNode* nex = NULL;
    while(cur != NULL)
    {
        nex = cur->next;
        cur->next = pre;
        pre = cur;
        cur = nex;
    }
    return pre;
}

(2)递归法

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* reverseList(struct ListNode* head){
    if(NULL==head || NULL==head->next){
        return head;
    }
    
    struct ListNode* ret = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;
    return ret;
}

8、奇偶链表

我的思路是把奇数节点和偶数节点分别放一个链表,然后拼接

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* oddEvenList(struct ListNode* head){    
    if(NULL == head) {
        return NULL;
    }
    struct ListNode* odd = head;
    struct ListNode* evenHead = head->next;
    struct ListNode* even = evenHead;
   
    while(even!=NULL && even->next!=NULL)
    {
        odd->next = odd->next->next;
        odd = odd->next;
        even->next = even->next->next;
        even = even->next;
    }
    odd->next = evenHead;
    return head;
}

反映问题:链表需要进一步理解

标签:head,ListNode,struct,next,链表,return,NULL
From: https://www.cnblogs.com/blue-Suri/p/17342974.html

相关文章

  • 剑指Offer——24.反转链表(c语言)
    title:剑指Offer24.反转链表(c语言)定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL限制:$$0\leqslant节点个数\leqslant5000$$代码如下:/***Definitionforsingly-linkedlist.......
  • 力扣——21.合并两个有序链表(c语言)
    title:力扣——21.合并两个有序链表(c语言)将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4,1->3->4输出:1->1->2->3->4->41、递归实现:/***Definitionforsingly-linkedlist.*structListNode{......
  • 力扣——83.删除排序链表中的重复元素(c语言)
    title:力扣——83.删除排序链表中的重复元素(c语言)题目描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入:1->1->2输出:1->2示例2:输入:1->1->2->3->3输出:1->2->3代码如下:/***Definitionforsingly-linkedlist.*structListNode{*......
  • #yyds干货盘点# LeetCode面试题:删除排序链表中的重复元素
    1.简述:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]2.代码实现:classSolution{publicListNodedeleteDuplicates(ListNodehead){......
  • 707设计链表
    力扣刷题707.设计链表--day3吸取经验OR不足之处对于c++中的类的基础知识不熟,以及结构,结构与类,结构和类中的方法与属性好好看懂这个结构设计:classMyLinkedList{public:structListNode{intval;ListNode*n......
  • 4/21 力扣 82. 删除排序链表中的重复元素 II
    给定一个已排序的链表的头 head, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回已排序的链表 。 示例1:输入:head=[1,2,3,3,4,4,5]输出:[1,2,5]示例2:输入:head=[1,1,1,2,3]输出:[2,3] 提示:链表中节点数目在范围[0,300]内-100<=Node.val<=100题目......
  • 删除链表的倒数第 N 个结点
    删除链表的倒数第N个节点19.删除链表的倒数第N个结点-力扣(LeetCode)给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]Python解:#Definitionforsingly-linkedlist.#classListNode(object):#......
  • 链表相交
    链表相交面试题02.07.链表相交-力扣(LeetCode)给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保......
  • leetcode-876链表的中间节点
    找链表的中间节点思路心得当不知道while的终止条件时,可以先写while(true),然后在循环体中写终止条件,这样写的好处是可以暂时不考虑终止条件,使思路更清晰;坏处是这样有时候会使循环体的内容很混乱要注意分类!本题中把情况分为节点个数是奇数和偶数去分析,最终找到统一的......
  • leetcode-234回文链表
    回文链表方法一:借助数组进行判断把节点的值复制到一个数组中再利用数组进行判断,但是这样需要占用额外的空间/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*......