【leetcode速通java版】03——移除链表元素,设计链表,反转链表

简介: 【leetcode速通java版】03——移除链表元素,设计链表,反转链表

leetcode-T203移除链表元素

36f84a39bc9246dabe86311f4ccdcf76.png


解法:

还挺简单的,为了对第一个数据归一化操作,定义头指针,不含数据的虚拟头节点。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if(head == null) {
            return head;
        }
        ListNode p = new ListNode(-1, head); 
        ListNode pre = p;
        ListNode cur = head;
        while(cur != null) {
           if(cur.val == val) {
               pre.next = cur.next;
           } else {
               pre = cur;
           }
           cur = cur.next;
        }
        return p.next;
    }
}

leetcodeT707 设计链表


3b5b3319499b4ca7a3ea224e35055239.png

class ListNode {
    int val;
    ListNode next;
    ListNode() {
    }
    ListNode(int val) {
        this.val = val;
    }
}
class MyLinkedList {
    int size; //链表的大小
    ListNode head; // 虚拟头节点
    public MyLinkedList() {
        size = 0;
        head = new ListNode(-1);
    }
    public int get(int index) {
        if(index > size - 1 || index < 0) { 
            return -1;
        }
        ListNode cur = head;
        while(index-- >= 0) { // 包含虚拟头结点,所以查找索引为index + 1 的结点
            cur = cur.next;
        }
        return cur.val;
    }
    public void addAtHead(int val) {
    // addAtIndex(0, val);
       ListNode temp = new ListNode(val);
       temp.next = head.next;
       head.next = temp;
       size++;
    }
    public void addAtTail(int val) {
        int index = size - 1;
        ListNode cur = head;
        while(index-- >= 0) {
            cur = cur.next;
        }
        ListNode temp = new ListNode(val);
        cur.next = temp;
        size++;
    }
    public void addAtIndex(int index, int val) {
        if(index > size) {
            return;
        }
        size++;
        if(index == size) {
            addAtTail(val);
            return;
        }
        if(index < 0) {
         // index = 0;
            addAtHead(val);
            return;
        }
        ListNode cur = head;
        while(index-- > 0) { // 找到前一个结点
            cur = cur.next;
        }
        ListNode temp = new ListNode(val);
        temp.next = cur.next;
        cur.next = temp;
    }
    public void deleteAtIndex(int index) {
        if(index < 0 || index > size - 1) {
            return;
        }
        size--;
         ListNode cur = head;
        while(index-- > 0) { // 找到前一个结点
            cur = cur.next;
        }
        cur.next = cur.next.next;
    }
}
/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList obj = new MyLinkedList();
 * int param_1 = obj.get(index);
 * obj.addAtHead(val);
 * obj.addAtTail(val);
 * obj.addAtIndex(index,val);
 * obj.deleteAtIndex(index);
 */

leetcodeT206 反转链表


22d66f514b254adc9749f18422eb238e.png

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = head;
        if(head == null) {
            return head;
        }
        ListNode cur = head.next;
        while(cur != null) {
            ListNode temp = cur.next;
            cur.next = prev;
            prev = cur;
            cur = temp;
        }
        head.next = null;
        return prev;
    }
}


相关文章
|
20天前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
31 1
|
27天前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
44 0
Leetcode第21题(合并两个有序链表)
|
26天前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
30 0
|
2月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
27天前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
21 3
|
27天前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
14 0
LeetCode第二十四题(两两交换链表中的节点)
|
27天前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
37 0
Leetcode第十九题(删除链表的倒数第N个节点)
01_移除链表元素
01_移除链表元素
|
27天前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
71 0
|
27天前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
18 0