24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:
------题目是两两交换其中相邻的节点,首先我们对两个节点进行互换,然后将第一个节点的指针指向下一组的首节点。这里的头节点我们将引入哨兵节点进行处理。
/**
* 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节点的前驱点,即可完成操作