什么做电子书下载网站,陕煤化建设集团网站矿建二公司,seo排名专业公司,网站建设潍坊1.反转链表
题目描述#xff1a;
给你单链表的头节点 head #xff0c;请你反转链表#xff0c;并返回反转后的链表。 思路#xff1a; 反转链表也就是链表倒置#xff0c;我一直以来的办法就是先建立一个头节点#xff0c;之后再遍历链表来进行头插。 代码#xff1…1.反转链表
题目描述
给你单链表的头节点 head 请你反转链表并返回反转后的链表。 思路 反转链表也就是链表倒置我一直以来的办法就是先建立一个头节点之后再遍历链表来进行头插。 代码
class Solution {public ListNode reverseList(ListNode head) {if(headnull) {return null;}ListNode tempnew ListNode();ListNode curhead;while(cur!null) {ListNode curNextcur.next;cur.nexttemp.next;temp.nextcur;curcurNext;}return temp.next;
}
}2.反转链表 II
题目描述
给你单链表的头指针 head 和两个整数 left 和 right 其中 left right 。请你反转从位置 left 到位置 right 的链表节点返回反转后的链表。 思路 这一题一开始肯定会想到通过遍历得到左边节点的位置以及左边节点前一个节点的位置按照上一题头节点尾插的方法以左边节点的前一个节点作为头节点来依次头插直至右边节点然后对完成反转的部分和后面的链表进行拼接。但是这里有一个问题如果left值给定的是1那该找谁作用于头插的那个头节点。所以在进行这些操作之前我首先定义一个空的头节点连接到原始链表之前然后pre指针以头结点地址为初始值cur指针以链表头为初始值进行遍历。具体可以看代码。
代码
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {if(headnull) {return null;}//用空节点链接链表防止出现left1时无法进行头插逆置的问题ListNode tempnew ListNode();temp.nexthead;//设定两个指针方便头插ListNode pretemp;ListNode curhead;//遍历获得右边节点的下一个节点的地址用于头插结束的循环条件以及倒置操作完成后的拼接while(right!0cur!null) {curcur.next;right--;}ListNode endcur;//遍历得到左边节点的地址curhead;while(left!1) {precur;curcur.next;left--;}//记录倒置完成后倒置部分最后一个节点的地址ListNode tailcur;//尾插倒置while(cur!end) {ListNode curNextcur.next;cur.nextpre.next;pre.nextcur;curcurNext;}//拼接tail.nextend; //返回定义空节点的下一个节点即可return temp.next;}}