链表编程题集合(leetcode)

简介: 链表编程题集合(leetcode)
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
1. 输入:head = [1,2,3,4,5]
2. 输出:[5,4,3,2,1]
public ListNode reverseList(ListNode head) {
        ListNode p=new ListNode();
        while (head!=null) {
          ListNode q=head.next;
        head.next=p.next;
        p.next=head;
          head=q;
        }
        return p.next;
    }
ListNode p=new ListNode();
 ListNode q=p;
    public  ListNode reverseList(ListNode head) {
        if(head==null)
        return head;
       if(head.next!=null)
           reverseList(head.next);
           head.next=q.next;
           q.next=head;
           q=head;
       return p.next;
    }
}
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
1. 输入:head = [1,2,6,3,4,5,6], val = 6
2. 输出:[1,2,3,4,5]
public ListNode removeElements(ListNode head, int val) {
        ListNode listNode=new ListNode();
        listNode.next=head;
        ListNode p=listNode;
        while (listNode.next!=null) {
            if(listNode.next.val==val) {
            listNode.next=listNode.next.next;
            }
            else 
                listNode=listNode.next;
        }
        return p.next;
    }
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)
1. 输入:head = [1,2,3,4]
2. 输出:[2,1,4,3]
 public ListNode swapPairs(ListNode head) {
        if(head==null||head.next==null)
            return head;
        ListNode p=new ListNode();
        p.next=head;
        ListNode q=p;
        while (head.next!=null){
            ListNode temp=head.next;
            head.next=temp.next;
            temp.next=head;
            p.next=temp;
            p=head;
            head=p.next;
        }
        return q.next;
    }
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
 public ListNode removeNthFromEnd(ListNode head, int n) {
        int sum=0,k=0;
        ListNode head1=head;
        while (head1!=null){
            head1=head1.next;
            sum++;
        }
        ListNode p=new ListNode();
        p.next=head;
        ListNode q=p;
        int r = sum - n+1;
        while (p.next!=null){
            k++;
            if(k==r){
                p.next=p.next.next;
            }
            else
            p=p.next;
        }
        return q.next;
    }


相关文章
|
2月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
38 1
|
2月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
52 0
Leetcode第21题(合并两个有序链表)
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
26 0
LeetCode第二十四题(两两交换链表中的节点)
|
2月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
46 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
2月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
96 0
|
2月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
23 0
|
2月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
18 0
|
2月前
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
13 0
|
2月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
33 0