删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-linked-list-elements。
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode header = new ListNode(-1);
header.next = head;
ListNode cur = header;
while(cur.next!=null){
if(cur.next.val==val){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return header.next;
}
}
遍历链表 找到节点tmp = cur.next将当前节点前一节点next指向当前节点下一个next完成删除该节点
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL
class Solution {
public ListNode reverseList(ListNode head) {
return reverse(null,head);
}
private static ListNode reverse(ListNode pre,ListNode cur){
if(cur==null){
return pre;
}
ListNode next = cur.next;
cur.next = pre;
return reverse(cur,next);
}
}
/*
ListNode pre = null;
ListNode cur = head;
ListNode tmp = new ListNode(0);
while(cur!=null){
tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
*/
迭代
Pre表示当前节点cur的前一个节点 用当前节点next指向pre再将pre移动到cur 使用临时Node tmp存放cur.next下一一个节点
递归
每一次始终让cur.next = pre 最后输出pre