LeetCode24两两交换链表中的节点

LeetCode24两两交换链表中的节点_第1张图片

思路:
设定一个dummy虚拟头节点 [注意:需要使用malloc分配好内存],两个指针,pre在后,cur在前,先链接后面的节点,避免链表丢失,循环进入下一轮的要注意指针的位置,剩下就是常规操作

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* swapPairs(struct ListNode* head) {
    struct ListNode* dummy=(struct ListNode*)malloc(sizeof(struct ListNode));//设置虚拟头节点
    struct ListNode* pre;
    struct ListNode* cur;
    dummy->next=head;//初始化
    pre=dummy;
    cur=dummy->next;
    while(cur!=NULL&&cur->next!=NULL)
    {
        pre->next=cur->next;
        cur->next=cur->next->next;
        pre->next->next=cur;
        pre=cur;//指针往后跳
        cur=cur->next;
    }
    return dummy->next;
}

你可能感兴趣的:(链表,数据结构)