算法通关村番外篇-一些优质链表题目

 大家好我是苏麟 , 今天说几道有关链表的题目 .

题目优质解法来自 : Krahets - 力扣(LeetCode)

推荐 : K神的精选88题 , 大家可以先观看我整理的二十关题目之后再刷K神的 .

算法通关村番外篇-一些优质链表题目_第1张图片

237.删除链表中的节点

描述 :

有一个单链表的 head,我们想删除它其中的一个节点 node

给你一个需要删除的节点 node 。你将 无法访问 第一个节点  head

链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。

删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:

  • 给定节点的值不应该存在于链表中。
  • 链表中的节点数应该减少 1。
  • node 前面的所有值顺序相同。
  • node 后面的所有值顺序相同。

题目 :

LeetCode 237. 删除链表中的节点

算法通关村番外篇-一些优质链表题目_第2张图片

代码 : 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

61.旋转链表

描述 :

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

题目 :

LeetCode : 61. 旋转链表

算法通关村番外篇-一些优质链表题目_第3张图片

代码 :

/**
 * 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 rotateRight(ListNode head, int k) {
        if(head == null || k == 0 || head.next == null){
            return head;
        }
        int countNode = 1;
        ListNode temp = head;
        while(temp.next != null){
            countNode++;
            temp = temp.next;
        }
        int add = countNode - k % countNode;
        if(add == 0){
            return head;
        }
        temp.next = head;
        while(add-- > 0){
            temp = temp.next;
        }
        ListNode cur = temp.next;
        temp.next = null;

        return cur;
    }
}

86.分隔链表

描述 :

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

题目 :

LeetCode 86. 分隔链表

算法通关村番外篇-一些优质链表题目_第4张图片

/**
 * 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 partition(ListNode head, int x) {
        ListNode sNode = new ListNode(-1);
        ListNode bnode = new ListNode(-1);
        ListNode stemp = sNode;
        ListNode btemp = bnode;
        while(head != null){
            if(head.val < x){
                stemp.next = head;
                stemp = stemp.next;
            }else{
                btemp.next = head;
                btemp = btemp.next;
            }
            head = head.next;
        }
        btemp.next = null;
        stemp.next = bnode.next;
        return sNode.next;
    }
}

 这期就到这里 , 下期见!

你可能感兴趣的:(算法村,算法,链表,数据结构,java,LeetCode)