0
点赞
收藏
分享

微信扫一扫

【Leetcode】Remove Linked List Elements


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

题目:

val.

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

思路:

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

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

算法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 条评论