zl程序教程

您现在的位置是:首页 >  后端

当前栏目

24. 两两交换链表中的节点-力扣双百代码

链表节点代码 24 力扣 交换 双百
2023-09-14 09:06:52 时间

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

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:
在这里插入图片描述

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

这题还好,解题代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */



struct ListNode* swapPairs(struct ListNode* head){
    
    struct ListNode *p=head;
    if(head==NULL||head->next==NULL){
        return head;
    }
    struct ListNode *l=(struct ListNode*)malloc(sizeof(struct ListNode)),*start=head->next;
    l->next=NULL;
    while(head){
        head=p;
        if(head==NULL){
            l->next=NULL;
            break;
        }
        
      if(p&&p->next){

      
          
                p=p->next;
                p=p->next;

            
        }
        if(head->next){
              l->next=head->next;
                l=l->next;
                 l->next=head;
         l=l->next;

        }
        else{
              l->next=head;
                l=l->next;
                l->next=NULL;
                break;


        }
      
      
      
        
       

    }


    return start;

    
  

}