Day4.链表(二)

56 阅读1分钟

24. 两两交换链表中的节点

力扣题目链接 (opens new window)

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

24.两两交换链表中的节点-题意.jpg 思路:

------题目是两两交换其中相邻的节点,首先我们对两个节点进行互换,然后将第一个节点的指针指向下一组的首节点。这里的头节点我们将引入哨兵节点进行处理。

/**
 * 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 swapPairs(ListNode head) {
        ListNode dumyhead = new ListNode(-1);
        dumyhead.next =head; 
        ListNode temp;
        ListNode firstNode;
        ListNode secondNode;
        ListNode cur =dumyhead;
        while(cur.next!=null && cur.next.next!= null){
            temp = cur.next.next.next;
            firstNode = cur.next;
            secondNode = cur.next.next;
            cur.next = secondNode;
            secondNode.next = firstNode;
            firstNode.next = temp;
            cur = firstNode;  
        }
        return dumyhead.next;

    }
}

19.删除链表的倒数第n个节点 给你一个链表,删除链表的倒数第 n **个结点,并且返回链表的头结点。

 

示例 1:

这道题考察的是链表删除的的基础,我们在处理一个节点的时候得知道这个节点的前一个节点,题干说明了倒数n个节点,暴力解法是先遍历一遍节点得到链表的长度,然后找到n节点在哪里最后进行删除。

进一步的想法:直接找到第n个节点,无需先遍历完节点,创建双指针,快指针先走n步后,慢指针开始走,当快指针的下一个为空的时候,此时的慢指针在倒数n节点的前驱点,即可完成操作