LeetCode(移除链表元素)
程序员文章站
2024-03-22 11:47:04
...
题目描述:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
代码1
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode cur = new ListNode(-1);
ListNode dummpy = cur;
while(head != null) {
if(head.val == val) {
cur.next = head.next;
}else {
cur.next = head;
cur = cur.next;
}
head = head.next;
}
return dummpy.next;
}
}
//申请一个头结点cur,并使用一个变量dummpy指向其初始的位置,cur 和 head同时向前遍历,head总比cur要快一个结点。
当head中结点的值达到要求时(即head.val = val),使较慢的cur.next直接指向head的下一个结点(当然也可以是null),
此时cur不用继续向前,head向前一步后,通过达到的结点后,cur继续向前。最终返回dummpy.next即可。
代码2:
class Solution
{
public ListNode removeElements(ListNode head, int val)
{
if (head == null)
return head;
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
}
}
递归太强大了
上一篇: Leetcode移除链表元素
下一篇: 双向循环链表的实现(C语言)