本文主要是介绍Leetcode: Swap Nodes in Pairs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
思路分析:
第一次将第一个元素插入到第二个元素后面,将第三个元素插入懂啊第四个后面,依次类推。
C++参考代码:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution
{
public:ListNode *swapPairs(ListNode *head){if (!head || !head->next) return head;ListNode *previous = nullptr;ListNode *current = head;ListNode *next = head->next;head = head->next;//记录调整后的头节点while (next){//将current节点插入到next节点后面current->next = next->next;next->next = current;//第一次的时候previous是nullptrif (previous) previous->next = next;//插入完毕后指针移动下一位previous = current;current = current->next;//最后current变成nullptr,这样直接把next也置为nullptr,退出循环if (current) next = current->next;else next = nullptr;}return head;}
};
C#参考代码:
/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val = x; }* }*/
public class Solution
{public ListNode SwapPairs(ListNode head){if (head == null || head.next == null) return head;ListNode previous = null;ListNode current = head;ListNode next = head.next;head = head.next;while(next != null){current.next = next.next;next.next = current;if (previous != null) previous.next = next;previous = current;current = current.next;if (current == null) next = null;else next = current.next;}return head;}
}
这篇关于Leetcode: Swap Nodes in Pairs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!