203. 移除链表元素
作者:互联网
203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
提示:
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50
c++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
* 时间复杂度: O(n)
* 空间复杂度: O(1)
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
// 删除头结点
while ( head != NULL && head->val == val) {
ListNode* temp = head;
head = head->next;
delete temp;
}
// 删除非头结点
ListNode* cur = head;
while (cur != NULL && cur->next != NULL) {
if (cur->next->val == val){
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
} else {
cur = cur->next;
}
}
return head;
}
};
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; }
* }
* 时间复杂度:O(n)
* 空间复杂度:O(1)
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
// 看头结点是不是满足条件
while (head != null && head.val == val){
head = head.next;
}
// 看头结点是不是为空
if(head == null){
return head;
}
// 确定头结点不为空
ListNode pre = head;
ListNode cur = head.next;
while (cur != null){
if(cur.val == val){
pre.next = cur.next;
} else {
pre = cur;
}
cur = cur.next;
}
return head;
}
}
问题:
-
几种语言之间关于内存的管理机制,以及清空相应内存的关键字 : delete free 等
-
头节点与首元节点
-
头节点:
有时,在链表的第一个节点之前会额外增设一个节点,该节点的数据域一般不存放数据(有些情况下也可以存放链表的长度等信息),此节点被称为头节点。
若链表中存在头节点,且头节点的指针域为空(NULL),表明链表是空表。
头节点对于链表来说,不是必须的,换句话说,一个完整的链表中可以不设有头节点。那么,可能有人会问:既然头节点无关紧要,那它有什么作用?在处理某些问题时,给链表添加头节点会使问题变得简单
-
首元节点:
链表中第一个元素所在的节点,它是头节点后边的第一个节点。
其实,首元节点和链表中存放数据的其他节点没什么不同,只是因为该节点位于链表的头部,所以被称为首元节点。
-
-
几种语言之间的特殊字符怎么填写 比如:true false 啥时候大写,啥时候小写,啥时候只有首字母大写
标签:203,ListNode,cur,val,head,next,链表,移除,节点 来源: https://www.cnblogs.com/luketebo/p/16476339.html