代码随想录二刷Day02链表:203.移除链表元素,707.设计链表,206.反转链表
创始人
2024-05-26 01:52:42
0

203.移除链表元素(写if的时候,要考虑要不要写else语句)

文章链接:代码随想录 (programmercarl.com)

思路:

(1)要操作链表的话,可以设置一个虚拟头节点,从而方便操作

(2)根据题目的要求,如果当前节点的val值是要删除的,那么就让当前节点的前一个节点指向当前节点的后一个节点

(3)使用单指针,遍历链表,找寻cur.next节点的值是否是要删除的节点

实现代码遇到的问题:

(1)循环体里应该是if + else 语句,举例子,如果为[7,7,7,7],循环体里是if语句的话就说出现跳过节点的情况

Java代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {//判断特殊情况if(head == null){return head;}//设置一个虚拟头节点ListNode dummynode = new ListNode(-1);dummynode.next = head;//cur指针ListNode cur = dummynode;//让指针开始遍历链表while(cur != null && cur.next != null){if(cur.next.val == val){cur.next = cur.next.next;}else{cur = cur.next;}}return dummynode.next;}
}

707.设计链表

文章链接:代码随想录 (programmercarl.com)

思路:需要设置虚拟头节点,需要设置链表长度,需要自己定义节点函数

Java代码:

//首先需要自己定义一个节点函数
class ListNode{int val;ListNode next;public ListNode(){}public ListNode(int val){this.val = val;}
}class MyLinkedList {//记录链表节点个数(即链表的长度)int size;//设置一个虚拟头节点,因为有可能删除的节点是头节点ListNode dummynode = new ListNode();public MyLinkedList() {//初始化size = 0;}public int get(int index) {if(index < 0 || index >= size){return -1;}ListNode cur = dummynode;for(int i = 0; i <= index;i++){cur = cur.next;}return cur.val;}public void addAtHead(int val) {addAtIndex(-1,val);}public void addAtTail(int val) {addAtIndex(size,val);}public void addAtIndex(int index, int val) {//如果index大于链表长度,直接returnif(index > size){return;}else{ListNode node = new ListNode(val);ListNode cur = dummynode;//让cur指向index的前一个节点for(int i = 0; i < index && cur != null;i++){cur = cur.next;}ListNode temp = cur.next;cur.next = node;node.next = temp;//长度加1size++;}}public void deleteAtIndex(int index) {//先判断特殊情况if(index < 0 || index >= size){return;}ListNode cur = dummynode;//找到要删除的节点前一个节点for(int i = 0; i < index && cur != null;i++){cur = cur.next;}//保存要删除节点的下一个节点ListNode temp = cur.next.next;cur.next = temp;//链表长度减一size--;}
}/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList obj = new MyLinkedList();* int param_1 = obj.get(index);* obj.addAtHead(val);* obj.addAtTail(val);* obj.addAtIndex(index,val);* obj.deleteAtIndex(index);*/

206.反转链表

文章链接:代码随想录 (programmercarl.com)

思路:双指针思路

实现代码遇到的问题:

(1)pre指针一开始应该指向的是null

(2)循环条件写错,应该写成cur != null 就行,不需要添加cur.next != null,以后遇到这种情况一定要举例子看条件是否成立

Java代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//先判断特殊情况if(head == null){return head;}//指针1ListNode pre = null;//指针2ListNode cur = head;while(cur != null){//首先存储节点ListNode temp = cur.next;cur.next = pre;pre = cur;cur = temp;}return pre;}
}

相关内容

热门资讯

成都市防汛抗旱指挥部终止防汛四... 四川在线记者 张红霞7月5日上午,成都市防汛抗旱指挥部对外发布:根据当前的雨情和水情趋势,决定于7月...
黄茅海跨海通道荣获国际桥梁大会... 转自:中工网工人日报-中工网记者 赵昂 通讯员 赵桂军 李晓晖近日,中铁十二局参与申报的“黄茅海跨海...
昆明市五华区工会、人社、法院紧... 来源:中工网-工人日报 中工网讯(工人日报-中工网记者赵黎浩)近日,云南省昆明市五华区总工会、区人社...
又一私募内幕交易曝光,连带董事... 财联社7月5日讯(记者 封其娟)私募行业再曝内幕交易罚单,3倍罚款叠加下,合计罚没超3800万元。湖...
乡镇小本创业致富项目(小项目创... 你对自己的现状满意吗?工资少,吃冷馒头,穿三双十块钱的袜子,红灯亮的时候你为自己的摩比克终于超过别人...
科技孵化园是做什么的(创业孵化... 开栏语科技兴,民族兴,科技强,国家强。5月6日,重庆召开科技创新研究成果交流会。党委书记陈敏儿主持会...
天路职工随雨而动筑牢高原铁路安... 转自:中工网工人日报-中工网记者 邢生祥 通讯员 赵风斌 马正俊7月4日凌晨,一场强降雨突袭青海大部...
低加盟费小创业项目(零创业加盟... 如果年满18周岁,没有犯罪记录,可以0元的初费成为鹿茶的“合伙人”?文 | 张行英编辑 | 杜布奇已...
市场 | 越南低价不锈钢冷轧持... (转自:要钢网)烨联4日发声明表示,越南持续倾销不锈钢冷轧至台湾市场,严重扰乱岛内钢市并造成产业实质...
创新创业项目点子,大学生创业中... 创新创业就是让我们打破一些常规的思维模式,然后改变我们的日子。那么,大学生有什么好的创新创业项目吗,...