刷题笔记(链表)-02

Posted 康小庄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题笔记(链表)-02相关的知识,希望对你有一定的参考价值。

题目地址:237. 删除链表中的节点 - 力扣(LeetCode) (leetcode-cn.com)

思路:只需要将node节点的next的val赋值给node节点的val,然后将node节点的next的next赋值node的next

/**
 * 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;
    }
}

题目地址:83. 删除排序链表中的重复元素 - 力扣(LeetCode) (leetcode-cn.com)

思路:

  • 首先判断头节点是否为空,空直接返回头节点
  • 定义一个ptr接受头节点,while循环,条件:ptr.next!=null 如果ptr的next的val等于ptr的val,那么ptr.next=ptr.next.next;
  • 否则ptr=ptr.next,最后返回头节点
/**
 * 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 deleteDuplicates(ListNode head) {
            if(head==null){
                return head;
            }
            ListNode ptr=head;
            while(ptr.next!=null){
                if(ptr.val==ptr.next.val){
                    ptr.next=ptr.next.next;
                }else{
                    ptr=ptr.next;
                }
            }
            return head;
    }
}

题目地址:剑指 Offer 24. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)

思路

  • 首先判断头节点和头节点的next是否为空,二者一个为空,直接返回头节点
  • 定义空的newhead
  • while循环 当头节点不为空
  • 先定义一个临时变量 temp 接受head的next ListNode temp=head.next;
  • head.next=newhead; 先把head的next为null
  • newhead=head; 再将head赋值给newhead
  • head=temp; 相当于交换头节点和头节点下一个节点的位置
  • 最后返回newhead

1 2 3 4 5

举例

  • head=1,head.next=2,temp=null
  • 先把2的值给temp,将2的位置变为null,
  • 再将1的值赋值给newhead,这样1反转过来就是最后一个元素
  • 最后将temp的值赋值给head,也就是头节点现在是2 ,继续循环下去得到结果 5 4 3 2 1
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null|| head.next==null){
            return head;
        }
        ListNode newhead=null;
        while(head!=null){
            ListNode temp=head.next;
            head.next=newhead;
            newhead=head;
            head=temp;
        }
        return newhead;
    }
}

代码均由力扣编译器,提交通过,描述编写不当地方还请大家评论区指出!

以上是关于刷题笔记(链表)-02的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题笔记之链表篇面试题 02.04. 分割链表

LeetCode刷题笔记-数据结构-day12

LeetCode刷题笔记-数据结构-day12

持续更新力扣刷题笔记

LeetCode Java刷题笔记—142. 环形链表 II

LeetCode刷题笔记-数据结构-day11