关闭

【Leetcode】Remove Linked List Elements

333人阅读 评论(0) 收藏 举报
分类:

题目链接:https://leetcode.com/problems/remove-linked-list-elements/

题目:

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5

思路:

链表增删操作都需要考虑删、增的是第一个结点的时候该怎么办,使得对表头操作和中间结点的操作不统一,需要特殊处理。

如果有头结点就可以省略判断如果删、增的是表头的情况,简化程序。

算法1:无头结点

	public ListNode removeElements(ListNode head, int val) {
		ListNode pre, p;
		pre = head;
		p = head;
		while (p != null) {
			if (p.val == val) {
				pre.next = p.next;
				p = p.next;
			} else {
				pre = p;
				p = p.next;
			}
		}
		// 处理第一个节点如果等于val的情况
		if (head == null) {
			return null;
		} else if (head.val == val) {// 如果删除的是第一个节点
			head = head.next;
		}
		return head;
	}

算法2:有头结点时

	public ListNode removeElements(ListNode head, int val) {
		ListNode pre, p;
		ListNode newHead = new ListNode(0);
		newHead.next = head;
		pre = newHead;
		p = newHead.next;

		while (p != null) {
			if (p.val == val) {
				pre.next = p.next;
			} else {
				pre = p;
			}
			p = p.next;
		}
		return newHead.next;
	}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:517209次
    • 积分:8095
    • 等级:
    • 排名:第2496名
    • 原创:305篇
    • 转载:6篇
    • 译文:0篇
    • 评论:34条
    博客专栏
    文章分类
    最新评论