Leetcode刷题之链表增加头结点的前缀节点

博客 动态
0 120
羽尘
羽尘 2022-03-31 21:57:22
悬赏:0 积分 收藏

Leetcode刷题之链表增加头结点的前缀节点

链表之增加头结点的前缀节点

  • 在许多链表题中往往需要在题目给的头结点之前增加一个前缀节点
  • 通常在删除链表和头结点需要交换时需要用到这一操作
  • 因为增加这个节点就避免了对删除头结点这种特殊情况的特殊处理
  • 而且往往在声明一个前缀节点之后再复制一个,前者保存不动用于最后结果返回,后者参与之后的操作

? Leetcode203删除链表元素

  • 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
  • 输入:head = [1,2,6,3,4,5,6], val = 6
  • 输出:head = [1,2,6,3,4,5,6], val = 6
 public ListNode removeElements(ListNode head, int val) {        ListNode prefinalHead=new ListNode(-1,head);        ListNode preHead=prefinalHead;        while(head!=null){            if(head.val==val){                preHead.next=head.next;            }else{                preHead=preHead.next;            }            head=head.next;        }        return prefinalHead.next;    }

Leetcode24两两交换链表中的节点

  • 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)
  • 输入:head=[1,2,3,4]
  • 输出:[2,1,4,3]
   public ListNode swapPairs(ListNode head) {        if(head==null){//没元素            return null;        }        if(head.next==null){//只有一个元素            return head;        }       ListNode pre=head;       ListNode post=head.next;       ListNode finallastpre=new ListNode(-1,head);       ListNode lastpre=finallastpre;       while(pre!=null){           if(post==null){//最后只剩一个节点                pre=pre.next;           }else{               ListNode temp=post.next;               post.next=pre;               lastpre.next=post;               pre.next=temp;               lastpre=pre;               pre=pre.next;               if(temp!=null){                    post=temp.next;               }else{                   post=null;               }                          }       }        return finallastpre.next;     }

Leetcode19删除链表的倒数第N个结点

  • 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点
  • 输入:head=[1,2,3,4,5],n=2
  • 输出:[1,2,3,5]
    public ListNode removeNthFromEnd(ListNode head, int n) {        ListNode prefinalHead=new ListNode(-1,head);        ListNode preHead=prefinalHead;        ListNode fast=head;        ListNode slow=head;        for(int i=1;i<n;i++){            fast=fast.next;        }        while(fast.next!=null){            slow=slow.next;            fast=fast.next;            preHead=preHead.next;        }        preHead.next=slow.next;        return prefinalHead.next;    }
posted @ 2022-03-31 21:18 fao99 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员