[203. 移除链表元素
class Solution {
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return null;
}
ListNode xuni_tou_node = new ListNode(0, head);
//等价于cur.value=0;cur.next=head;
ListNode pre = xuni_tou_node;
ListNode cur = head;
while (pre.next!= null) {
if (head.val == val) {
head = head.next;
}//这个if循环一定是写在while里面的,参见[7,7,7,7]例子,第一次写外面了没过……
if (cur.val == val) {
pre.next = cur.next;
}
else{
pre = cur;
}
// 这个else第二次测试时候没写,理想的逻辑应该是当删除一个元素时,pre保持不动,只有cur在始终后移
cur = cur.next;
}
return head;
}
}
206. 反转链表
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {//这个basecase还蛮重点的,next为空这个条件漏写导致一直报错
return head;
}
ListNode pre = head;
ListNode cur = head.next;//要保证使用.next的结点一定是存在的结点,即要保证head节点一定存在
ListNode last = cur.next;//由上知要保证cur节点一定存在
//三指针初始化完毕
head.next = null; //首结点指向空,开始反转
while (last != null) {
cur.next = pre;//后结点的next指针指向前节点
//三指针后移
pre = cur;
cur = last;
last = last.next;
}
cur.next = pre;//null不能在存在null.next,即当last==null时必须得退出循环了,
//所以最后一个结点的反转我是单独处理的
return cur;
}
}
总结:
链表题,在确定解题思想后,画图理思路、手动模拟的过程很重要,弄明白这些,链表题还是很简单的(Tip今天都是代码很快就出来了,但改错,纠细小问题花了很多时间 (;′⌒`))
707. 设计链表
个人原因,太菜又时间紧张,所有有些题只能在一刷时选择性放弃(挖坑,二刷时再来补……)
标签:head,ListNode,cur,随想录,next,链表,移除,null From: https://www.cnblogs.com/szwsama/p/17066061.html