203. 移除链表元素
题目链接:203. 移除链表元素
文档讲解:代码随想录(programmercarl.com)
视频讲解:手把手带你学会操作链表 | LeetCode:203.移除链表元素
状态:已解决
一、思路
设置两个指针,一个指向需要移除的链表元素的前一个元素,一个指向需要移除的链表元素的后一个元素。其中若有连续个数的元素需要删除,则保持左指针指向元素不变,只移动右指针。
二、解法
方法:迭代
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 null;
}
ListNode head1=new ListNode();
head1.next=head;
ListNode next=head;
ListNode str=head1;
while(next!=null){
if(next.val!=val){
str.next=next;
str=str.next;
}
next=next.next;
}
str.next=null;
return head1.next;
}
}
复杂度分析:
时间复杂度:O(n)
空间复杂度: O(1)
三、难点
迭代方法、循环终止条件、浅拷贝。
206. 反转链表
题目链接:206. 反转链表
文档讲解:代码随想录(programmercarl.com)
视频讲解:帮你拿下反转链表 | LeetCode:206.反转链表 | 双指针法 | 递归法
状态:已解决
一、思路
设置三个指针,一个指向第一个元素,一个指向第二个元素,一个指向第三个元素。每次操作将第一个元素和第二个元素之间的指向关系反转,之后将这两个指针分别指向第二个指针和第三个指针指向的元素,并且将第三个指针右移。迭代,即可将整个链表反转。
二、解法
方法:迭代
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||head.next==null){
return head;
}
ListNode p1=head;
ListNode p2=head.next;
ListNode p3=head.next.next;
p1.next=null;
p2.next=p1;
while(p3!=null){
p1=p2;
p2=p3;
p3=p3.next;
p2.next=p1;
}
return p2;
}
}
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)
三、难点
判断迭代方法和循环终止条件。