反转链表相关的练习(上)
创始人
2024-05-31 03:34:37
0

目录

一、反转链表

二、反转链表 ||

三、两两交换链表中的结点

四、K 个一组翻转链表



一、反转链表

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

示例 1

 输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

示例 2

 输入:head = [1,2]

输出:[2,1]

示例 3

输入:head = []

输出:[]

提示

  • 链表中节点的数目范围是 [0, 5000]

  • -5000 <= Node.val <= 5000

代码实现一

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

代码实现二(将结点依次头插到新链表中)

struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* newhead = NULL;struct ListNode* cur = head;while (cur != NULL){struct ListNode* after = cur->next;// 头插cur->next = newhead;newhead = cur;cur = after;} return newhead;
}


二、反转链表 ||

给你单链表的头指针 head 和两个整数 leftright ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表

示例 1

 输入:head = [1,2,3,4,5], left = 2, right = 4

输出:[1,4,3,2,5]

示例 2

输入:head = [5], left = 1, right = 1

输出:[5]

提示

  • 链表中节点数目为 n

  • 1 <= n <= 500

  • -500 <= Node.val <= 500

  • 1 <= left <= right <= n

进阶: 你可以使用一趟扫描完成反转吗?

代码实现

struct ListNode* reverseBetween(struct ListNode* head, int left, int right)
{struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode));guard->next = head;struct ListNode* tmp = guard;// 1. 让 tmp 指向第 left - 1 个结点(不包括哨兵位的头结点)for (int i = 0; i < left - 1; ++i){tmp = tmp->next;}// 2. 反转从位置 left 到位置 right 的链表结点struct ListNode* pre = tmp->next;struct ListNode* cur = pre->next;for (int i = 0; i < right - left; ++i){struct ListNode* after = cur->next;cur->next = pre;pre = cur;cur = after;}// 经过反转,tmp->next 指向的结点变成了从位置 left 到位置 right 中最后一个结点,// 而 pre 指向的结点则变成了第一个结点tmp->next->next = cur;  // (1)tmp->next = pre;  // (2)head = guard->next;free(guard);return head;
}

图解示例一

 


三、两两交换链表中的结点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1

 输入:head = [1,2,3,4]

输出:[2,1,4,3]

示例 2

输入:head = []

输出:[]

示例 3

输入:head = [1]

输出:[1]

提示

  • 链表中节点的数目在范围 [0, 100]

  • 0 <= Node.val <= 100

代码实现

struct ListNode* swapPairs(struct ListNode* head)
{// 创建一个哨兵位的头结点struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode));guard->next = head;// 交换 tmp 后面的两个结点struct ListNode* tmp = guard;while (tmp->next && tmp->next->next){struct ListNode* node1 = tmp->next;struct ListNode* node2 = tmp->next->next;tmp->next = node2;  // (1)node1->next = node2->next;  // (2)node2->next = node1;  // (3)// 更新 tmptmp = node1;}head = guard->next;free(guard);return head;
}


四、K 个一组翻转链表

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1

 输入:head = [1,2,3,4,5], k = 2

输出:[2,1,4,3,5]

示例 2

 输入:head = [1,2,3,4,5], k = 3

输出:[3,2,1,4,5]

提示

  • 链表中的节点数目为 n

  • 1 <= k <= n <= 5000

  • 0 <= Node.val <= 1000

代码实现

struct ListNode* reverseKGroup(struct ListNode* head, int k)
{struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode));guard->next = head;struct ListNode* tmp = guard;while (1){// 判断剩余长度是否大于或等于 kstruct ListNode* p = tmp;for (int i = 0; p != NULL && i < k; ++i){p = p->next;}if (p == NULL){break;}// 翻转 tmp 后面的 k 个结点struct ListNode* pre = tmp->next;struct ListNode* cur = pre->next;for (int i = 0; i < k - 1; ++i){struct ListNode* after = cur->next;cur->next = pre;pre = cur;cur = after;}// 经过翻转后,tmp->next 指向的结点变成了最后一个结点,// 而 pre 指向的结点则变成成了第一个结点tmp->next->next = cur;  // (1)struct ListNode* last = tmp->next;  // 保存最后一个结点的地址tmp->next = pre;  // (2)// 更新 tmptmp = last;}head = guard->next;free(guard);return head;
}

图解示例二

相关内容

热门资讯

武陵山天空被鸟群刷屏 转自:JSTV荔枝视频 【#武陵山天空被鸟群刷屏#】眼下...
河南鹤壁有人下河摸金摸铜钱?当... 近日,有网民发布视频称,位于河南省鹤壁市浚县新镇镇卫河流域,有人下河摸金摸铜钱,引发关注。视频显示,...
大连西山水库出现成群黑色大鱼,... 来源:半岛晨报 5月6日下午,市民王先生在大连西山水库发现一群体型较大、通体黝黑的无鳞怪鱼,经专家鉴...
助力工业精神传承,培养创新型人... 5月10日,记者从柳州市教育局获悉,为了更好地将工匠精神、实业报国融入思想政治教育,柳州将打造大中小...
牌桌上的美丽绽放——欧碧奴美容... 转自:衡水日报2025年5月9日,成都青白江东方欲晓十五里休闲中心,160位欧碧奴会员姐姐与亲友闺蜜...
婚姻登记“全国通办”政策问答 来源:“中国民政”微信公号5月10日,新修订的《婚姻登记条例》正式施行,婚姻登记实现“全国通办”。为...
强对流天气致墙体倒塌 3人死亡... 来源:国家应急广播 近日广西百色有网友称参加葬礼时遭遇强对流天气墙体倒塌致多人死伤相关话题冲上社交平...
珍酒李渡举行2024年度股东周... 5月9日,珍酒李渡集团2024年度股东周年大会暨投资者交流会在湖南长沙1912珍酒美食研究所举行,股...
全国仅12个入选!梧州六堡茶国... 转自:梧州发布日前,国家知识产权局公布第一批国家地理标志保护示范区典型案例,全国仅12个保护示范区入...
美业全新动态:杭州美莱受邀出席... 转自:蚌埠新闻网2025年5月7日,杭州美莱受邀亮相2025中国时尚美学盛典Moly Gala,以"...
青年与城市如何共成长?50人论... 来源:中国新闻网 中新网上海5月10日电 题:青年与城市如何共成长?50人论坛交出“上海答卷”作者 ...
葬礼上再发惨剧!3人确认死亡,... 近日,广西百色网友称,参加葬礼遇强对流天气,墙体倒塌致多人死伤。韦女士接受记者采访时表示,近日与家人...
国海证券原总裁意外离世!年61... (转自:金融街1号狙击手)5月10日,据券商中国报道,国海证券原总裁齐国旗近日因遭遇交通意外,不幸离...
永达股份:子公司部分产品应用于... 永达股份(001239)5月9日在业绩说明会上表示,公司控股子公司江苏金源高端装备有限公司部分产品应...
永远不能忘却的纪念(今日谈) 来源:人民日报80年前的伟大胜利打败了不可一世的法西斯势力,带给世人恒久的启迪:光明必将驱散黑暗,正...
社工“寻味儿”救场避免险情   本报讯(实习记者侯国棣)近日,平谷区滨河街道南小区社区84岁的李大爷忘记了厨房正在煮饭的锅,把锅...
美元贬值,这次不一样 美国总统特朗普经常说希望美元贬值。在他看来,这可以降低制造业出口成本,从而促进出口,帮助减少美国巨额...
张本智和:深受雨果世界杯夺冠冲... 来源:九派新闻 近日,日本乒乓球队举行多哈世乒赛赛前新闻发布会,日本男乒选手张本智和在接受采访时谈到...
具茨山原来是中华文明的C位 【#具茨山原来是中华文明的C位#】具茨山位于黄帝故里河南新郑西南,属中岳嵩山东南余脉,东西延绵约40...
李姓股民向ST东时发起索赔 刘...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...