链表题目练习及讲解(上)

简介: 链表题目练习及讲解(上)

本节小编将分享链表的部分练习题,友友们可以自己去练练,更好的理解链表!

1.找倒数节点

采用快慢指针的方法,先让快指针走k步,然后两个指针同时运动,当快指针指向空时,慢指针刚好指向满足的倒数节点。


struct ListNode {
   int val;
  struct ListNode *next;
  };
 
typedef struct ListNode LN;
int kthToLast(struct ListNode* head, int k){
    LN*fast,*slow;
    fast=slow=head;
    //快指针先走k步
    while(k--){
        fast=fast->next;
    }
    while(fast){
        slow=slow->next;
        fast=fast->next;
    }
    return slow->val;
}

2.链表的中间节点

单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

本题同样可以采取快慢指针的方法,快指针和慢指针同时从头节点出发,快指针走两步,慢指针走一步,当快指针为空或者快指针的下一节点为空时,慢指针刚好指向满足条件的中间节点。(节点为偶数,奇数时)


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode LN;
struct ListNode* middleNode(struct ListNode* head) {
    LN *slow,*fast;
    slow=fast=head;
    while(fast && fast->next){
        slow=slow->next;
        fast=fast->next->next;
    }
    //此时slow指向的是中间节点
    return slow;
}

3.反转链表

206. 反转链表 - 力扣(LeetCode)

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

思路1:创建一个新链表,遍历原链表,将原链表节点头插到新链表中。

思路2:创建三个指针n1,n2,n3,完成翻转。

让n2->next=n1;n1=n2;n2=n3;n3=n3->next,到n3指向空。

循环操作...循环操作...循环操作


struct ListNode {
    int val;
   struct ListNode *next;
 };
 
typedef struct ListNode LN;
struct ListNode* reverseList(struct ListNode* head) {
    if (head==NULL)
    return head;
    LN *n1,*n2,*n3;
    n1=NULL;
    n2=head;
    n3=head->next;
    
    while(n2){
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3)
        n3=n3->next;
    }
    return n1;
}

链表题目练习及讲解(下):https://developer.aliyun.com/article/1624371

目录
相关文章
【LeetCode题目详解】(三)21.合并两个有序链表、141.环形链表、142.环形链表Ⅱ
【LeetCode题目详解】(三)21.合并两个有序链表、141.环形链表、142.环形链表Ⅱ
103 0
|
测试技术
【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点
【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点
81 0
|
1月前
|
存储
链表题目练习及讲解(下)
链表题目练习及讲解(下)
25 9
|
5月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
5月前
|
SQL 算法 数据可视化
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
|
6月前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
41 1
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
5月前
|
存储 SQL 算法
LeetCode 题目 82:删除排序链表中的重复元素 II
LeetCode 题目 82:删除排序链表中的重复元素 II
|
5月前
|
算法 数据挖掘 Python
LeetCode题目25 hard:K个一组翻转链表 【分治策略 Python】
LeetCode题目25 hard:K个一组翻转链表 【分治策略 Python】
|
5月前
|
SQL 算法 数据挖掘
力扣题目 19:删除链表的倒数第N个节点 【python】
力扣题目 19:删除链表的倒数第N个节点 【python】